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