iOS解析crash日志

2019-07-27  本文已影响0人  CoderLS
5   LSDemo                      0x00000001059ad750 0x10492c000 + 17307472
6   LSDemo                      0x00000001059ad2f4 0x10492c000 + 17306356
7   LSDemo                      0x00000001059b1ac0 0x10492c000 + 17324736

0x00000001059ad750=0x10492c000+17307472 是此函数运行时地址
0x10492c000为运行时此模块基地址
17307472是相对模块基地址,函数偏移量,10进制数需转成16进制

运行时模块基地址 = 静态模块基地址 + ASLR
运行时函数地址 = ASLR + 静态函数地址
运行时函数地址 = 运行时模块基地址 + 函数偏移 
静态函数地址 = 运行时模块基地址 + 函数偏移 - ASLR

静态函数地址 = (静态模块基地址 + ASLR) + 函数偏移 - ASLR
静态函数地址 = 静态模块基地址 + 函数偏移
静态模块基地址 = MACH-O loadCommand  TEXT端中vmaddress值
函数偏移 例如上面第5行崩溃是 +17307472
17307472是10进制需转换成16进制
所以最终寻找的地址是 vmaddress + 17307472 ,然后拿着此值在dsym文件中寻找,
dsym中每个方法或函数对应存储这开始地址和结束地址,当寻找的地址在这2个地址中间,则代表调用的是此方法
otool -l APP_BUNDLE_NAME.app.dSYM/Contents/Resources/DWARF/APP_BUNDLE_NAME

以下4种办法解析crash日志

dwarfdump -lookup=静态函数地址  APP_BUNDLE_NAME.app.dSYM
target create --arch arm64 ./APP_BUNDLE_NAME.app.dSYM/Contents/Resources/DWARF/APP_BUNDLE_NAME
image lookup --address 静态函数地址 
atos -arch arm64 -o APP_BUNDLE_NAME.app.dSYM/Contents/Resources/DWARF/APP_BUNDLE_NAME -l 运行时模块基地址 函数运行时地址

https://github.com/lsmakethebest/LSiOSShell

上一篇下一篇

猜你喜欢

热点阅读