在MacOSX/PPC上,关于如何在0x0000000000000000处捕获内核保护失败的建议

在MacOSX/PPC上,关于如何在0x0000000000000000处捕获内核保护失败的建议,macos,exception,crash,powerpc,Macos,Exception,Crash,Powerpc,这是一个实时MMO客户端,在某个随机点它将崩溃并跳转到0,堆栈帧无法读取。崩溃报告程序(和GDB)将报告线程0崩溃: XC_BAD_ACCESS (SIGBUS) KERN_PROTECTION_FAILURE at 0x0000000000000000 及 如何捕获发生此错误的位置?如果堆栈指针(r1)和链接寄存器已损坏,则看起来不太好。但是,也有可能其他一些寄存器中仍然有帧指针的值-例如,经常看到的非叶函数将地址移动到它们通过r0返回堆栈或从堆栈返回的地址 除此之外,您还可以使用一些技巧-

这是一个实时MMO客户端,在某个随机点它将崩溃并跳转到0,堆栈帧无法读取。崩溃报告程序(和GDB)将报告线程0崩溃:

XC_BAD_ACCESS (SIGBUS)
KERN_PROTECTION_FAILURE at 0x0000000000000000

如何捕获发生此错误的位置?

如果堆栈指针(
r1
)和链接寄存器已损坏,则看起来不太好。但是,也有可能其他一些寄存器中仍然有帧指针的值-例如,经常看到的非叶函数将地址移动到它们通过
r0
返回堆栈或从堆栈返回的地址


除此之外,您还可以使用一些技巧-假设在地址
0x0
处的进程地址空间中没有任何映射(这似乎是
EXEC\u BAD\u ACCESS
错误中的情况),您可以编写一个简单的预加载库来映射页面零;这将允许您在
0x0
处添加断点;这可能会为您提供更多关于正在发生的事情的信息。

您是否可以发布gdb命令的结果
info registers
-其中可能有一些有用的信息。
srr0=lr=exception address=0