代码链接
https://wwqf.lanzoue.com/iTBFY14okted
问题描述:
运行后VMLAUNCH错误 : 8
VOID SetupVMCS()
{
unsigned __int64 ret = 0;
//KdBreakPoint();
// 客户机 guest
// 宿主机 root
__vmx_vmwrite(HOST_CR0, ret = __readcr0()); KdPrintEx((77, 0, "cr0 = [%p]\r\n", ret));
__vmx_vmwrite(HOST_CR3, ret = __readcr3()); KdPrintEx((77, 0, "cr3 = [%p]\r\n", ret));
__vmx_vmwrite(HOST_CR4, ret = __readcr4()); KdPrintEx((77, 0, "cr4 = [%p]\r\n", ret));
__vmx_vmwrite(HOST_ES_SELECTOR, ret = (Asm_GetEs() & 0xFFFFFFFFFFFFFFF8)); KdPrintEx((77, 0, "es = [%p]\r\n", ret));
__vmx_vmwrite(HOST_CS_SELECTOR, ret = (Asm_GetCs() & 0xFFFFFFFFFFFFFFF8)); KdPrintEx((77, 0, "cs = [%p]\r\n", ret));
__vmx_vmwrite(HOST_DS_SELECTOR, ret = (Asm_GetDs() & 0xFFFFFFFFFFFFFFF8)); KdPrintEx((77, 0, "ds = [%p]\r\n", ret));
__vmx_vmwrite(HOST_FS_SELECTOR, ret = (Asm_GetFs() & 0xFFFFFFFFFFFFFFF8)); KdPrintEx((77, 0, "fs = [%p]\r\n", ret));
__vmx_vmwrite(HOST_GS_SELECTOR, ret = (Asm_GetGs() & 0xFFFFFFFFFFFFFFF8)); KdPrintEx((77, 0, "gs = [%p]\r\n", ret));
__vmx_vmwrite(HOST_SS_SELECTOR, ret = (Asm_GetSs() & 0xFFFFFFFFFFFFFFF8)); KdPrintEx((77, 0, "ss = [%p]\r\n", ret));
__vmx_vmwrite(HOST_TR_SELECTOR, ret = (Asm_GetTr() & 0xFFFFFFFFFFFFFFF8)); KdPrintEx((77, 0, "tr = [%p]\r\n", ret));
__vmx_vmwrite(HOST_TR_BASE, (ret = GetSegmentBase((ULONG)Asm_GetTr()))); KdPrintEx((77, 0, "trBase = [%p]\r\n", ret));
__vmx_vmwrite(HOST_FS_BASE, (ret = GetSegmentBase((ULONG)Asm_GetFs()))); KdPrintEx((77, 0, "fsBase = [%p]\r\n", ret));
__vmx_vmwrite(HOST_GS_BASE, (ret = GetSegmentBase((ULONG)Asm_GetGs()))); KdPrintEx((77, 0, "gsBase = [%p]\r\n", ret));
__vmx_vmwrite(HOST_GDTR_BASE, (ret = ASM_GETGDTR())); KdPrintEx((77, 0, "gdtr = [%p]\r\n", ret));
__vmx_vmwrite(HOST_IDTR_BASE, (ret = ASM_GETIDTR())); KdPrintEx((77, 0, "idtr = [%p]\r\n", ret));
//__vmx_vmwrite(HOST_IA32_SYSENTER_CS, 0x10); //KdPrintEx((77,0,"MSR_IA32_SYSENTER_CS = [%p]\r\n",ret));
//__vmx_vmwrite(HOST_IA32_SYSENTER_ESP,((size_t)virtualAddress_STACK + 0x1000)); //KdPrintEx((77,0,"MSR_IA32_SYSENTER_ESP = [%p]\r\n",ret));
//__vmx_vmwrite(HOST_IA32_SYSENTER_EIP,(ret = __readmsr(MSR_IA32_LSTAR))); KdPrintEx((77,0,"MSR_IA32_SYSENTER_EIP = [%p]\r\n",ret));
__vmx_vmwrite(HOST_IA32_SYSENTER_CS, __readmsr(MSR_IA32_SYSENTER_CS) & 0xFFFFFFFF);
__vmx_vmwrite(HOST_IA32_SYSENTER_ESP, __readmsr(MSR_IA32_SYSENTER_ESP) & 0xFFFFFFFF);
__vmx_vmwrite(HOST_IA32_SYSENTER_EIP, __readmsr(MSR_IA32_SYSENTER_EIP) & 0xFFFFFFFF);
__vmx_vmwrite(HOST_RSP, (size_t)virtualAddress_STACK);
__vmx_vmwrite(HOST_RIP, (size_t)_exitHandle);
// 虚拟机控制
// 1;虚拟机执行
__vmx_vmwrite(PIN_BASED_VM_EXEC_CONTROL, AdjustControls(0, MSR_IA32_VMX_PINBASED_CTLS));
__vmx_vmwrite(CPU_BASED_VM_EXEC_CONTROL, AdjustControls(0, MSR_IA32_VMX_PROCBASED_CTLS));
// 2;虚拟机进入
__vmx_vmwrite(VM_ENTRY_CONTROLS, AdjustControls(0, MSR_IA32_VMX_ENTRY_CTLS));
// 3;虚拟机退出
__vmx_vmwrite(VM_EXIT_CONTROLS, AdjustControls(0, MSR_IA32_VMX_EXIT_CTLS));
}
↑ 这是对虚拟机宿主机字段设置的相关代码,
上图是文档中关于字段设置描述的内容
上图是运行后的输出内容
如果正常的话应该是没有错误的,会进入到给定的_exitHandle
处理函数中。
希望能帮忙看下,谢谢
环境:
Win10 - 64 (1903)