240 发简信
IP属地:上海
  • 120
    函数栈帧与IP寄存器

    接着上篇文章内容 函数栈帧与BP寄存器[https://juejin.cn/post/7402058032651665462] 我们继续构造两个函数的栈帧,GDB调试,当程序...

  • 120
    函数栈帧与BP寄存器

    让我们写一段简单的代码来分析 通过GDB调试,我们可以查看寄存器和汇编代码,方便我们理解这里我们在main,foo函数加上断点 通过layout split命令同时查看源码和...

  • 120
    inline hook 原理

    主要思路是找到被hook函数地址,并将被hook函数地址执行指令替换成jmp <地址偏移量>,这个地址由hook函数地址和target函数地址相减计算而来,jmp相对跳转指令...

  • 120
    Debugger底层原理

    弄清楚GDB的底层原理,首先需要了解一下ptrace这个系统调用: ptrace 是一个用于在 Unix 和 Unix-like 操作系统上进行进程调试的系统调用。它允许一个...

  • MMKV修改数据源码

    大家都知道MMKV性能好,因为是直接操作内存。内存其实就是一个数组结构,根据地址去寻址查找数据的,就跟数组通过index查找数据一样,但是数组修改是很不方便的,比如删除中间一...

  • 使用libunwind获取堆栈

    Ubuntu安装libunwindapt-get install libunwind8-dev编译命令:gcc unwind.c -lunwind

  • AspectJ基本语法和意义

    AspectJ是一种面向切面编程(AOP)语言,它可以用于在Java代码中定义和使用切面。下面是AspectJ的基本语法和意义: 下面是AspectJ的完整语法: 切面声明 ...

  • 120
    程序的构造和解释

    1. 构造函数抽象 先思考一个问题,如何计算平方根?最常用的方法就是牛顿逐步逼近法, 比如我们要计算2的平方根,假定初始猜测值是1 猜测商平均值 一般我们用代码写出来就是下面...

  • 120
    Mac OS启动 Android Device Monitor卡住

    观察其他App的UI结构,需要用到Android Device Monitor 的 Dump View Hierarchy 功能。 Mac 上 Monitor 在 Andro...

  • Android识别管道文件

    Java的File类提供的接口仅限于判断目录和文件,有时候在复制某些数据的时候,还需要判断其它的文件类型,比如管道文件,需要过滤掉,不然IO操作的时候会阻塞。这里我们用到的是...

  • sychronized原理

    偏向锁适合在只有一个线程执行同步代码时,提升性能线程进入同步代码块是,会通过CAS(compare and swap)操作,设置对象头的锁标志位,如果标志位的线程id为空,则...

  • 120
    TCP握手原理

    客户端向服务端发起连接请求,带上SYN(value1)同步标记 服务端收到客户端的请求,给与回复ACK(value1+1),以及自己的请求SYN(value2) 客户端收到S...

  • 120
    SSL握手原理

    目的就是生成对称加密密钥 客户端向服务端发送信息,包含客户端随机数,支持的加密算法版本 服务端向客户端发送服务端随机数,和自己的公钥证书 客户端通过操作系统预置的证书链,验证...

  • Kotlin特性

    内联inline 扩展 Class.<extension> 委托 by 自动添加getter,setter 判空?: 函数类型 -> <Return> 函数引用 ::<me...

  • Android SharedPreferences 源码解析

    此篇主要讲commit和apply操作的实现我们对这玩意儿的印象是commit是同步操作,apply是异步操作,尽量用apply,少用commit。那么问题来了, 线上卡顿日...