zoukankan      html  css  js  c++  java
  • mach_msg收到的exception message中的subcode表示什么?

    问题来源于 KSCrash 中两个针对 mach exception message 中 codesubcode 类型、取值的 PR。

    Mac OS X Internals: A Systems Approach 一书的 Section 9.7. Mach Exceptions 中,有对 codesubcode 取值的解释。

    参考 https://flylib.com/books/en/3.126.1.109/1/

    SRR0 是什么?

    SRR0 全称是 Machine Status Save/Restore Register 0,即机器状态保存/恢复寄存器0。

    SRR0 在 64 位实现中是 64 位寄存器,在 32 位实现中是 32 位寄存器。对于 32 位实现,SRR0 取低 32 位。 SRR0 寄存器用于在异常情况下保存机器状态,并在执行 rfid (或 rfi)指令时恢复机器状态。

    当异常发生时,SRR0 被设置为指向一条指令,这条指令恰好满足之前的所有指令都已完成执行,没有后续指令开始执行。当 rfid(或rfi)指令被执行时,SRR0 的内容被复制到下一条指令地址(NIA),即下一条要执行的指令的 32 位 或 64 位地址。

    根据异常类型的不同,SRR0 所寻址的指令可能没有完成执行。SRR0 对引起异常的指令或紧接着的指令进行寻址。寻址的指令可以通过异常类型和状态位来确定。

    rfid、rfi 指中断返回指令。

    DAR 是什么?

    DAR 全称是 Data Address Register,即数据地址寄存器。

    在 DSI 或 对齐异常(alignment exception)后,DAR 被设置为故障指令(faulting instruction)生成的有效地址。

    更具体的解释,如果内存访问导致异常(如对齐异常),则内存访问指令生成的有效地址会被放在 DAR 中。如果异常发生在以32位模式运行的64位实现中,DAR的高 32 位被清除。

    DSI 异常发生在因为某些原因不能执行数据存储器访问时。这种访问可以由 load/store 指令、某些内存控制指令、某些缓存控制指令产生。

    SRR0、DAR 参考 http://www.csit-sun.pub.ro/~cpop/Documentatie_SMP/Motorola_PowerPC/PowerPc/GenInfo/pemch2.pdf
    DSI 参考 http://www.csit-sun.pub.ro/~cpop/Documentatie_SMP/Motorola_PowerPC/PowerPc/GenInfo/pemch6.pdf

    文章版权归个人所有,转载时请在文章显眼位置给出本文链接。
  • 相关阅读:
    python 格式化 json输出
    python
    回顾2013
    C扩展Python
    C扩展Python
    Python
    Python interview preparing
    Python用smtplib发送邮件
    Python 安装路径, dist-packages 和 site-packages 区别
    nginx worker_cpu_affinity使用方法
  • 原文地址:https://www.cnblogs.com/xjshi/p/14389767.html
Copyright © 2011-2022 走看看