如何在没有符号的crash日志里定位错误代码,这的联合crash日志,和iDA能查看.首先咱们来剖析一下crash日志的构造
1.首先看到图中的crash日志堆栈信息的0x102920000示意是mach-o的入口地址,+299612示意是mach-o里的偏移地址,转换成16进制为0x4925c
图一
2.在ida中查看0x4925c的地址所在汇编代码:是main里的代码
图二
这和复原符号之后的代码齐全吻合:
图三
3.别急下面的crash代码只是一部分,咱们来还原真正的crash代码,last exception Backtrace ,咱们要找到堆栈信息里属于以后app的地址.
@1.第一步确定MTSS_SDKTestDemo在内存中的地址范畴,crash日志下拉到Binary Images段,查看得悉地址范畴为0x102920000~0x102c57fff
@2.找到last exception Backtrace中在0x102920000~0x102c57fff范畴的地址,计算出他们的偏移量
0x1029682c8 - 0x102920000 -> 0x482C8
0x10297c3b4 - 0x102920000 -> 0x5C3B4
0x10297c09c - 0x102920000 -> 0x5C09C
0x102977564 - 0x102920000 -> 0x57564
0x482C8在ida查看为,定位到为+[SignalCrashTest throwNil]办法中执行字典赋值导致的nil解体