【问题标题】:Distinguishing between code and data pages on x86_64 MMU区分 x86_64 MMU 上的代码页和数据页
【发布时间】:2014-05-27 21:50:56
【问题描述】:

我正在尝试在系统仿真模式下分析 qemu。目标是能够识别页面错误,并将它们分类为数据页面错误或代码页面错误。

在研究了 x86_64 架构(这是正在模拟的)之后,我无法区分代码页和数据页。 MMU 是否区分它们?

【问题讨论】:

    标签: x86 paging qemu


    【解决方案1】:

    当页面错误发生时,使用处理器压入堆栈的错误代码来确定错误的原因。这在图 6-9 中Software Developers Manual 的第 3A 卷中进行了描述。具体来说,I/D 位指示是否是指令取指导致了故障。

    -- 编辑--

    CPU 在标准异常堆栈帧之后将错误代码推送到主管堆栈。有关堆栈帧的图片,请参见程序员参考中的图 6-8。当控制权转移到您的处理程序时,ESP 会指向错误代码。

    【讨论】:

    • qemu的emulated cpu也会这样吗?
    • qemu 应该正确地模拟这种行为,所以是的,你可以使用它
    • 您能否详细说明此错误是在何处推送的?阅读英特尔文档 12 小时后,我似乎陷入了困境。此错误被推送到哪个堆栈?
    • 是的,就是这样。 ESP 指向错误代码。一个简单的按位或 qemu 给了我想要的东西。谢谢!在我的问题中发布我的实现细节是否明智,或者 qemu 代码是否无关紧要?
    • 这是一个小众市场,所以我个人不会费心用代码更新。你的问题已经很清楚了。
    猜你喜欢
    • 2017-01-31
    • 2014-11-18
    • 2016-01-16
    • 2012-07-21
    • 1970-01-01
    • 1970-01-01
    • 2021-04-18
    • 1970-01-01
    • 2011-03-11
    相关资源
    最近更新 更多