1. 写在前面
1.1 名词解释
模块基地址: 模块在内存中的起始地址
ASLR偏移: 虚拟内存起始地址与模块基地址的偏移量
ASLR(地址随机化)是一种针对缓冲区溢出的安全保护技术,通过对堆、栈、共享库映射等线性区布局的随机化,通过增加攻击者预测目的地址的难度,防止攻击者直接定位攻击代码位置,达到阻止溢出攻击的目的
虚拟内存地址 = 模块基地址 + ASLR偏移
1.2 静态库与动态库
静态库: 静态库本质上类似于编译文件(*.o)的压缩包, 只是在链接过程中, 被合并到app的二进制,所以静态库具备"被吸附性"
动态库: 动态库是一个链接号的二进制文件, 会被整体载入内存, 而且不能被宿主App吸附. 和静态库不同, 动态库实在app启动的时候载入内存, 此时, 会将动态库的代码段载入到App虚拟内存中, 并且拥有独立的内存空间(动态库的数据段会在宿主App链接时提前做备份), 其基地址有别于宿主程序和其他动态库 所以使用hopper进行反汇编时, 如果是宿主程序, 需要使用宿主程序的基地地址, 相应的, 动态库需要使用动态库的基地址
在.crash文件的最下边, 可以找到宿主app和动态库的基地址:
宿主程序: ZQMusic, 基地址: 0x102a7c000
动态库: AgoraCore , 基地址: 0x1054d0000
动态库: ZegoExpressEngine , 基地址:0x10709c000

参见
[iOS动态库、静态库及使用场景、方式](https://www.jianshu.com/p/4e0fd0214152)
[iOS程序员的自我修养](https://juejin.cn/post/6844903912143585288)
2. Hopper反汇编
2.1 前提
在使用[hopper](