我很好奇为什么gdb不显示x86的控制寄存器。我一直在使用带有qemu的gdb来调试一些内核。我使用info寄存器和info all-registers获取寄存器值。
然而,我不能得到cr3和cr2。(一般CRs)。有没有办法得到它们。如果没有,那么他们为什么不提供。
-Thanks
答案 0 :(得分:7)
如果你正在使用qemu,你可以通过在启动qemu的shell中发出这两个命令来获取所有寄存器状态(甚至是控制状态):
答案 1 :(得分:2)
更新:
您可以从gdb检查控制寄存器的值。问题是你的程序必须以实模式运行(大多数引导加载程序都有一个在实模式下运行的部分)。
来自@Mahouk的更新:
由于我和@Majouk在这个帖子上的票数相同,所以你一定要查看他的答案并尝试从qemu获取寄存器值。
原始回答:
我有同样的问题,似乎gdb没有那个选项。 我不确定为什么他们没有提供,但我可以建议你另类。
你可以从Qemu切换到Bochs。是的,它可能有点古怪或较慢但是
它有一个非常好的内部调试器。用于查看控制寄存器的命令
bochs是creg
。
有关详细信息,请参阅Boch的文档here。
祝你好运:)答案 2 :(得分:0)
info registers
确实向我显示了CR寄存器,这可能是由于QEMU更新造成的,因为QEMU发送了XML,该XML描述了它将显示给GDB的寄存器。我看到了:
cr0 0x80050033 [ PG AM WP NE ET MP PE ]
cr2 0x6a8d18 6982936
cr3 0xe0bc000 [ PDBR=7 PCID=0 ]
cr4 0x7406f0 [ PKE SMAP SMEP OSXSAVE OSXMMEXCPT OSFXSR PGE MCE PAE PSE ]
cr8 0x0 0
或者我也可以通过以下方式获得单个的东西:
i r cr0
i r cr2
i r cr3
经过this exact setup的测试。