[VT入门]VT开启流程

VMXON

INTEL手册31章(31.5)开始

  • 创建vmxon所需要的4K非分页内存,为VMXONRegion,传入vmxon的参数时,需要换算成物理地址,然而分别传入所分配地址的物理地址的低地址和高地址。
  • 通过rdmsr 480结果的后31位读取版本号
    并以此版本号初始化g_VMXCPU.pVMXONRegion非分页内存的首字节。
  • 检查VMXON是否开启成功


填写VMCS

  • 初步概览
  1. Guest state fields
  2. Host state fields
  3. vm-control fields (INTEL 24.6,24.7,24.8)
    3.1 vm execution control
    3.2 vm exit control
    3.3 vm extry control
  • (24.6.1 Pin-Based VM-Execution Controls)
    即读取rdmsr 0x481,获取结果的高32位(原来是1的表示这些位可以设置为1,原来是0的必须设置为0,and运算);低32位(原来是1的这些位必须设置为1,原来是0的可以设置为0,or运算)

  • 24.6.2 Processor-Based VM-Execution Controls

VMLAUNCH

vmcs 虚拟机控制结构(VirtualMachineControlStructure)

VMX非root操作和VMX转换是由一个称为虚拟机控制结构(的VMCS)数据结构所控制。

访问VMCS结构是通过一个被称为VMCS指针的处理器状态组件所管理的(每个逻辑处理器一个)。该VMCS指针的值是VMCS结构的64位地址。VMCS结构指针利用VMPTRST指令和VMPTRLD指令来读取和写入。VMM使用VMREAD,VMWRITE和VMCLEAR指令配置VMCS结构。

VMM可以为每个虚拟机使用不同的VMCS。对于具有多个(虚拟处理器)逻辑处理器的虚拟机,VMM可以为每个虚拟处理器使用不同的VMCS。

vmclear

MS文档
(INTEL手册31.6中)

  • VMLaunch启动失败错误查询
    通过Vmx_VmRead(VM_INSTRUCTION_ERROR)(VM_INSTRUCTION_ERROR为0x00004400)获取错误码
    然后在INTEL手册30.4中查询对应的错误码VM-Instruction Error Numbers
  • VMExit Reason错误查询
    INTEL手册24.9
    如果最高位为1,则表示VM ENTRY ERROR表示第一次进入VM错误,(而不是一般的VM EXIT),低位的BasicrReason可以在INTEL附录C中查询
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容