解析Crash准备的材料
- 原材料:Crash log
- 辅料: dysm 和 app
- 工具: symbolicatecrash, otool, xcrun, atos
收集材料
- (Xcode)Windows -> Device -> View Device Logs
- Log 收集第三方平台
- 打包应用时的 .xcarchive(dysm, app)
第一道菜 Symbolicatecrash
|
|
分析
|
|
第二道菜 符号地址逐行解析
起始地址:即使每次iOS app启动都会加载(main module)主模块在不同的内存地址(大多数情况下32bit框架对应的地址是0x4000、64bit框架对应的地址为0x0000000100000000)。
- cd xx.app
- 1234567891011121314otool -arch arm64 -l xxx.app/xxx | grep -B 1 -A 10 "LC_SEGM" | grep -B 3 -A 8 "__TEXT"Load command 1cmd LC_SEGMENT_64cmdsize 952segname __TEXTvmaddr 0x0000000100000000vmsize 0x00000000000b8000fileoff 0filesize 753664maxprot 0x00000005initprot 0x00000005nsects 11flags 0x0
其中 vmaddr 0x0000000100000000 地址便为我们所要的app运行起始地址。
计算 symbol address
symbol address = 地址偏移量+起始地址。
起始地址上面我们已经得到,地址偏移量就是单行信息中“+”号后面的数值。
解析 symbol address
xcrun atos –arch arm64 -o xxx.app/xxx [addresss]
load address 相对偏移解析
xcrun atos –arch arm64 -o xxx.app/xxx -l [address] [address]