【问题标题】:On MacOSX/PPC, suggestions on how to catch KERN_PROTECTION_FAILURE at 0x0000000000000000在 MacOSX/PPC 上,有关如何在 0x0000000000000000 处捕获 KERN_PROTECTION_FAILURE 的建议
【发布时间】:2009-06-29 21:14:48
【问题描述】:

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

XC_BAD_ACCESS (SIGBUS)
KERN_PROTECTION_FAILURE at 0x0000000000000000

srr0=lr=exception address=0

我怎样才能发现这个错误发生在哪里?

【问题讨论】:

  • 您能否发布 gdb 命令的结果 info registers - 那里可能有一些有用的信息。

标签: macos exception crash powerpc


【解决方案1】:

如果您的堆栈指针 (r1) 和链接寄存器被丢弃,那么它看起来并不好。但是,其他一些寄存器可能仍然具有帧指针的值 - 例如,经常看到非叶函数将地址移动到它们通过r0返回到堆栈或从堆栈返回。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-06
    • 2011-09-06
    • 2012-04-22
    • 1970-01-01
    • 2018-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多