Mah*_*ouk 5 gdb kernel breakpoints qemu watchpoint
我正在调试内核,我想知道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 的内部结构有相当多的了解才能有效地做到这一点......