在 KVM 中,我试图获取来宾 VM 的 GDT 的基地址和大小。当我读取 Windows 7 64 位来宾 VM 中的值时,我得到以下值: gdt base 0xfffff80003b37000
, gdt limit 0x7f
。这些值是我通过驱动程序在内核模式下用 gdtr 读出的。但是,当我在存储所有值的 VMCB 中的 VMEXIT(由 SYSCALL 触发)上读取值时,我得到以下(不同)值: gdt base 0xFFFFFFFFA03F8060
, gdt limit 0x8060
。我希望这些值是相同的。是否必须进行某种翻译/计算才能获得正确的值?
我在 KVM 中使用以下函数读出了该值:
vmcs_readl(GUEST_GDTR_BASE)
vmcs_read32(GUEST_GDTR_LIMIT)
我实际上对 IDTR 有同样的问题。但是,我只对 GDTR 感兴趣。读出 CR3、RIP 或 RAX 等其他寄存器工作正常。