如何在没有符号的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崩溃


宋冬野
32 声望4 粉丝

引用和评论

0 条评论