KVM:读取GDT基础并限制主机上客户VM的值

时间:2015-05-21 20:13:58

标签: virtual-machine virtualization intel kvm hypervisor

在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等其他寄存器可以正常工作。

1 个答案:

答案 0 :(得分:0)

从内核中,您获得了一个访客物理地址(GPA),而在虚拟机管理程序中,您获得了一个主机物理地址(HPA)。

您可以使用gfn_to_pfn中定义的KVM函数kvm_host.h进行翻译。