我正在调试内核,我想知道cr3寄存器的更改时间。我知道如何在像eax和其他人这样的通用寄存器上设置观察点。
问题是,由于gdb无法访问控制寄存器,因此在cr3上设置观察点不起作用。
那么,是否可以从qemu监视器设置观察点?如果是,怎么样?
答案 0 :(得分:3)
抱歉,QEMU显示器无法执行此操作。 (如果你看一下QEMU源代码中的target-i386 / helper.c:cpu_x86_update_cr3(),你会发现它没有做任何可以通知任何人有关CR3更新的事情,它只是将新值放入内部CPU状态结构。)
你可以做的最好的事情就是运行两个调试器(一个连接到QEMU的gdbstub与guest虚拟机通信,一个直接调试QEMU本身)。然后你可以在QEMU的cpu_x86_update_cr3()上放一个断点,然后看看发生了什么。你需要了解QEMU内部的相当数量才能有效地做到这一点,不过......