使用gdbserver和qemu进行调试,如何在控制寄存器上设置观察点,cr3

使用gdbserver和qemu进行调试,如何在控制寄存器上设置观察点,cr3,gdb,kernel,breakpoints,qemu,watchpoint,Gdb,Kernel,Breakpoints,Qemu,Watchpoint,我正在调试内核,我想知道cr3寄存器何时更改。我知道如何在eax和其他通用寄存器上设置观察点 问题是,由于gdb不能访问控制寄存器,所以在cr3上设置一个观察点是不起作用的 那么,是否可以从qemu监视器设置观察点?如果是,如何进行?抱歉,QEMU监视器无法执行此操作。(如果您查看QEMU源代码中的target-i386/helper.c:cpu_x86_update_cr3(),您会发现它不会向任何人通知cr3更新,它只是将新值放入内部cpu状态结构中。) 对于这类事情,您最好使用两个调试器运

我正在调试内核,我想知道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的内部结构有相当多的了解,才能有效地做到这一点,不过