乐趣区

关于crash:iOS-从没有转换符号的crash日志里精准定位错误代码

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

退出移动版