我正在调试内核,我想知道 cr3 寄存器何时更改。我知道如何在 eax 等通用寄存器上设置观察点。
问题是,由于 gdb 无权访问控制寄存器,因此在 cr3 上设置观察点不起作用。
那么,是否可以从 qemu 监视器设置观察点?如果是,如何?
我正在调试内核,我想知道 cr3 寄存器何时更改。我知道如何在 eax 等通用寄存器上设置观察点。
问题是,由于 gdb 无权访问控制寄存器,因此在 cr3 上设置观察点不起作用。
那么,是否可以从 qemu 监视器设置观察点?如果是,如何?
抱歉,QEMU 监视器无法执行此操作。(如果您查看 QEMU 源代码中的 target-i386/helper.c:cpu_x86_update_cr3() ,您会发现它没有做任何通知任何人关于 CR3 更新的事情,它只是将新值放入内部 CPU 状态结构体。)
对于这类事情,你能做的最好的事情是使用两个调试器(一个连接到 QEMU 的 gdbstub 以与来宾对话,一个直接调试 QEMU 本身)。然后你可以在 QEMU 中的 cpu_x86_update_cr3() 上放一个断点,然后看看发生了什么。你需要对 QEMU 的内部有相当多的了解才能有效地做到这一点,不过......