控制寄存器和gdb

age*_*ith 9 debugging gdb qemu linux-kernel

我很好奇为什么gdb不显示x86的控制寄存器.我一直在使用带有qemu的gdb来调试一些内核.我使用info寄存器和info all-registers获取寄存器值.

但是,我不能得到cr3和cr2.(一般CRs).有没有办法得到它们.如果没有,那么他们为什么不提供.

-谢谢

Mah*_*ouk 9

如果你正在使用qemu,你可以通过在你启动qemu的shell中发出这两个命令来获得所有寄存器状态(甚至是控制状态):

  • ctrl -a c(切换到qemu命令界面)
  • info寄存器(获取寄存器状态)


Ser*_*eim 2

更新:

您可以从 gdb 检查控制寄存器的值。问题是您的程序必须在实模式下运行(目前大多数引导加载程序都有一部分在实模式下运行)。

来自@Mahouk 的更新:

由于我和 @Majouk 在该线程上拥有相同的票数,因此您一定应该查看他的答案并尝试从 qemu 获取寄存器值。

原答案:

我遇到了同样的问题,不幸的是 gdb 似乎没有这个选项。我不确定为什么不提供它们,但我可以向您建议替代方案。

您可以从 Qemu 切换到 Bochs。是的,它可能有点古怪或较慢,但它有一个非常好的内部调试器。使用 bochs 查看控制寄存器的命令是creg

有关更多信息,您可以在此处参考 Boch 的文档。

祝你好运 :)