Ios ARM:崩溃线程上的意外链接寄存器内容

Ios ARM:崩溃线程上的意外链接寄存器内容,ios,arm,stack-trace,cpu-registers,crash-dumps,Ios,Arm,Stack Trace,Cpu Registers,Crash Dumps,我有一个iOS崩溃转储[EXC_BAD_ACCESS/KERN_INVALID_ADDRESS],带有崩溃线程的寄存器状态和堆栈内存 登记册内容如下: r0 = 0x00000000 r1 = 0x288bf020 r2 = 0x01e7afe0 r3 = 0xd7741000 r4 = 0x01e7b000 r5 = 0x00000000 r6 = 0x1665a924 r11 = 0x00000000 r8 = 0x14e11af0 r9 = 0x0

我有一个iOS崩溃转储[EXC_BAD_ACCESS/KERN_INVALID_ADDRESS],带有崩溃线程的寄存器状态和堆栈内存

登记册内容如下:

r0 = 0x00000000    r1 = 0x288bf020    r2 = 0x01e7afe0    r3 = 0xd7741000
r4 = 0x01e7b000    r5 = 0x00000000    r6 = 0x1665a924    r11 = 0x00000000
r8 = 0x14e11af0    r9 = 0x00000000   r10 = 0x1df94d0c    r12 = 0x00000000
r7 = 0x1df94bb8    sp = 0x1df94bb8    lr = 0x00000000    pc = 0x3991a44a
LinkRegisterr和FramePointer7在这里似乎不一致

如果我忽略LinkRegister和trust FramePointer,并使用堆栈内存在FramePointer链接的帮助下释放调用堆栈,我会得到一个合理的回溯,回溯大约15帧

如果我信任LinkRegister,它是0,则意味着没有返回地址,我没有去哪里跟踪

我不明白为什么LinkRegister是0?可能会发生什么?
我如何复制这个?或者我遗漏了什么。

最有可能的是,某个地方有什么东西损坏了一个非叶堆栈帧-一旦执行返回到该帧,到达末尾并弹出保存的返回地址boom。请特别注意局部变量的地址被传递到子函数的任何地方。lr的值是否已被推送到堆栈上?或者某个地方lr寄存器被设置为0,而它应该是另一个寄存器。这与处于Thumb模式无关。lr可能用作通用寄存器。您需要签出pc 0x3991a44a周围的代码。您正在匹配堆栈。也许你即将返回,你弹出了一些错误的返回地址空?实际上,您需要在汇编程序和更高级别的源代码中显示pc周围的代码。编译器可以通过多种不同的方式使用寄存器,具体取决于代码生成选项。