在中原本就有怎么通过符号查找字符串的说明,如下图:
![image.png](https://upload-images.jianshu.io/upload_images/1013424-85bc9442d5e9cdcc.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
现在以上一篇中的NSLog为例来说明一下:
1、通过懒加载表Lazy Symbol Pointers找到动态表Dynamic Symbol Table->Indirect Symbols
懒加载表Lazy Symbol Pointers与动态表Dynamic Symbol Table是一一对应的关系
![image.png](https://upload-images.jianshu.io/upload_images/1013424-da8e0ac47a1ed4c5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![image.png](https://upload-images.jianshu.io/upload_images/1013424-058a4e72320fdd00.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
2、动态表的Data值找到Symbol Table->Symbols
在Indirect Symbols中找到Data值 0x7A,换成10进制是122。Data值其实就是一个下标,是一个真正符号表的下标。
![image.png](https://upload-images.jianshu.io/upload_images/1013424-110770c5a9879ec3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![image.png](https://upload-images.jianshu.io/upload_images/1013424-7dcaabc9ae3eb950.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
3、根据Symbols的偏移值Data,在String Table找到字符串
- Symbols的偏移为:0x9B
String Table的起始值是:0x4EFC
字符串的位置:0x4EFC + 0x9B = 0x4F97
_是函数的开始 .是分隔符 根据0x4F97可以找到: _NSLog.