动态符号表dSYMs原理
2020-07-05 本文已影响0人
东方奇迹
1、结构上:
- dSYMs(动态符号表)的本质就是方法符号(或方法名)和方法地址(方法地址并不是真正的内存地址)映射表。
2、原理上:
- 项目编译后,Products文件中的xxx.app可执行文件中包含了方法符号和对应的方法地址,在我们打包的时候,苹果为了相对安全就把可执行文件中的方法符号进行拆除,拆成了不带方法符号的可执行文件(只有方法地址,这样别人就会不知道这块地址代表的是哪个方法,增加了反编译的成本)和方法符号表(方法符号和方法地址的映射表),其中可执行文件中的方法地址和方法符号表中的方法地址是一一对应的。
验证如下:
截屏2020-07-05 下午1.42.44.png
截屏2020-07-05 下午1.40.11.png
截屏2020-07-05 下午1.42.07.png
截屏2020-07-05 下午1.40.53.png
3、功能上:
- APP崩溃后我们可以拿到堆栈地址,但是从线上的发包拿到的地址只是单纯的内存地址,并不能拿到方法符号,所以根据拿到的这个内存地址去对应到符号表中相同的内存地址,这样就可以知道是哪个方法挂掉了。
NSUncaughtExceptionHandler
[NSThread currentThread].callStackSymbols