1

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 などの他のレジスタの読み取りは正常に機能します。

4

1 に答える 1

0

カーネルからゲスト物理アドレス (GPA) を取得し、ハイパーバイザーからホスト物理アドレス (HPA) を取得しています。

gfn_to_pfnで定義されている KVM 機能を使用kvm_host.hして変換を行うことができます。

于 2015-10-08T09:32:50.810 に答える