6

我正在调试内核,我想知道 cr3 寄存器何时更改。我知道如何在 eax 等通用寄存器上设置观察点。

问题是,由于 gdb 无权访问控制寄存器,因此在 cr3 上设置观察点不起作用。

那么,是否可以从 qemu 监视器设置观察点?如果是,如何?

4

1 回答 1

3

抱歉,QEMU 监视器无法执行此操作。(如果您查看 QEMU 源代码中的 target-i386/helper.c:cpu_x86_update_cr3() ,您会发现它没有做任何通知任何人关于 CR3 更新的事情,它只是将新值放入内部 CPU 状态结构体。)

对于这类事情,你能做的最好的事情是使用两个调试器(一个连接到 QEMU 的 gdbstub 以与来宾对话,一个直接调试 QEMU 本身)。然后你可以在 QEMU 中的 cpu_x86_update_cr3() 上放一个断点,然后看看发生了什么。你需要对 QEMU 的内部有相当多的了解才能有效地做到这一点,不过......

于 2015-08-04T17:18:11.610 回答