В 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, отлично работает.