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

时间:2015-07-30 08:52:08

标签: gdb kernel breakpoints qemu watchpoint

我正在调试内核,我想知道cr3寄存器的更改时间。我知道如何在像eax和其他人这样的通用寄存器上设置观察点。

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

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

1 个答案:

答案 0 :(得分:3)

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

你可以做的最好的事情就是运行两个调试器(一个连接到QEMU的gdbstub与guest虚拟机通信,一个直接调试QEMU本身)。然后你可以在QEMU的cpu_x86_update_cr3()上放一个断点,然后看看发生了什么。你需要了解QEMU内部的相当数量才能有效地做到这一点,不过......