2015-05-21 2 views
1

В KVM я пытаюсь получить базовый адрес и размер GDT гостевой виртуальной машины. Когда я читаю значение внутри гостевой виртуальной машины Windows 7 с 64-битной версией, я получаю следующие значения: gdt base 0xfffff80003b37000, gdt limit 0x7f. Эти значения я считывал с помощью gdtr в режиме ядра через драйвер. Однако, когда я читаю значение на VMEXIT (вызванном SYSCALL) в VMCB, где хранятся все значения, я получаю следующие (разные) значения: gdt base 0xFFFFFFFFA03F8060, gdt limit 0x8060. Я ожидал бы, что значения будут одинаковыми. Есть ли какой-то перевод/расчет, который нужно сделать, чтобы получить правильное значение?KVM: чтение базы GDT и предельное значение гостевой виртуальной машины на хосте

Я зачитала значение, используя следующие функции KVM:

vmcs_readl(GUEST_GDTR_BASE) 
vmcs_read32(GUEST_GDTR_LIMIT) 

Я на самом деле имеют один и тот же вопрос с IDTR. Однако меня интересует только GDTR. Чтение других регистров, таких как CR3, RIP или RAX, отлично работает.

ответ

0

Из ядра, вы получаете гостевой физический адрес (GPA), а с гипервизора вы получаете физический адрес хоста (HPA).

Вы можете использовать функцию KVM gfn_to_pfn, определенную в kvm_host.h, чтобы сделать перевод.

Смежные вопросы