Ios ARM:崩溃线程上的意外链接寄存器内容
我有一个iOS崩溃转储[EXC_BAD_ACCESS/KERN_INVALID_ADDRESS],带有崩溃线程的寄存器状态和堆栈内存 登记册内容如下: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
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周围的代码。编译器可以通过多种不同的方式使用寄存器,具体取决于代码生成选项。