05_基本框架_VMCS_HostArea
》When Exit event triggered, this setting would response!
相当于 产生中断从虚拟机Guest返回到HOST处理的时候 HOST 的环境
1.1 白皮书上相关介绍
chapter 27 .5 describes VM Exits Loading Host State details or exceptions。
chapter 24.5 describes the Area
代码
1 // 设置 HOST 区域 2 3 Vmx_VmWrite(HOST_CR0, Asm_GetCr0()); 4 Vmx_VmWrite(HOST_CR3, Asm_GetCr3()); 5 Vmx_VmWrite(HOST_CR4, Asm_GetCr4()); 6 7 Vmx_VmWrite(HOST_ES_SELECTOR, Asm_GetEs() & 0xFFF8); 8 Vmx_VmWrite(HOST_CS_SELECTOR, Asm_GetCs() & 0xFFF8); 9 Vmx_VmWrite(HOST_DS_SELECTOR, Asm_GetDs() & 0xFFF8); 10 Vmx_VmWrite(HOST_FS_SELECTOR, Asm_GetFs() & 0xFFF8); 11 Vmx_VmWrite(HOST_GS_SELECTOR, Asm_GetGs() & 0xFFF8); 12 Vmx_VmWrite(HOST_SS_SELECTOR, Asm_GetSs() & 0xFFF8); 13 Vmx_VmWrite(HOST_TR_SELECTOR, Asm_GetTr() & 0xFFF8); 14 15 Vmx_VmWrite(HOST_TR_BASE, 0x80042000); 16 17 Vmx_VmWrite(HOST_GDTR_BASE, GdtBase); 18 Vmx_VmWrite(HOST_IDTR_BASE, IdtBase); 19 20 Vmx_VmWrite(HOST_IA32_SYSENTER_CS, Asm_ReadMsr(MSR_IA32_SYSENTER_CS)&0xFFFFFFFF); 21 Vmx_VmWrite(HOST_IA32_SYSENTER_ESP, Asm_ReadMsr(MSR_IA32_SYSENTER_ESP)&0xFFFFFFFF); 22 Vmx_VmWrite(HOST_IA32_SYSENTER_EIP, Asm_ReadMsr(MSR_IA32_SYSENTER_EIP)&0xFFFFFFFF); // KiFastCallEntry 23 24 Vmx_VmWrite(HOST_RSP, ((ULONG)g_VMXCPU.pStack) + 0x2000); //Host 临时栈 25 26 Vmx_VmWrite(HOST_RIP, (ULONG)VMMEntryPoint); //这里定义我们的VMM处理程序入口 27 》 EXIT 例程 28 29 void __declspec(naked) VMMEntryPoint(void) 30 31 // 注意:1. 裸函数里面不要用局部变量;因为使用到ebp;而裸函数不维护,如果手动维护,那么和普通函数有什么却别; 32 // 2. 裸函数 是为了我们更好的控制进来那一刻 寄存器等的 获取、设置 33 // 3. 裸函数 最好不要太冗余;所以 有很多操作的话,最好 另外封装一个函数,在裸函数中调用即可。 34 { 35 // Refresh selector -- >underneath part-- gdtinfo; 36 //do Exchange itself can refresh the VM TLB when selector right ; 37 __asm{ 38 mov ax,fs; 39 mov fs,ax; 40 41 mov ax,gs; 42 mov gs,ax; 43 int 3; 44 45 } 46 47 48 }
测试 HOST_State Fields
》成功进入 指定的VM_Exit(就是当前设置的VMMEntryPoint)处理例程中
(因为 最开始VM——Launch 会尝试执行 Guest Area,但是当前我们还没有配置,所以会出错,就会尝试执行VM_Exit到Host 来处理这个异常)

![1571810475742[4] 1571810475742[4]](https://img2018.cnblogs.com/blog/1748935/201910/1748935-20191027110831325-502327077.png)
![1571811214144[4] 1571811214144[4]](https://img2018.cnblogs.com/blog/1748935/201910/1748935-20191027110832633-1818084062.png)
![1572070683824[4] 1572070683824[4]](https://img2018.cnblogs.com/blog/1748935/201910/1748935-20191027110833825-856647196.png)
浙公网安备 33010602011771号