码迷,mamicode.com
首页 > 其他好文 > 详细

VT开启前的检测与开启

时间:2019-12-30 19:38:04      阅读:89      评论:0      收藏:0      [点我收藏+]

标签:set   tar   数据   指令   cpu   物理   opera   ext   href   

Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html

VT开启前的检测与开启

该部分代码位于:VtCode2 中。

 

一、VT开启前的检测工作

  1)2.2.3 检测CPU是否支持VT:

    1> 使用CPUID指令(Intel手册卷2查看该指令):CPUID指令01号功能,返回在ECX的第五位表示VMX,如果VMX=1,则表示CPU已经开启VT功能。

    技术图片

     2> 因此使用如代码判断CPU是否支持VT功能。

    技术图片

   2)2.3.2.1 IA32_FEATURE_CONTROL寄存器

    1> 在MSR中的地址:3AH(Intel手册卷3 23.3 VMX operation中)

      技术图片

    2> windbg: rdmsr 3a 显示其为 05h, 101b,第一位lock位锁住,第三位在SMX模式之外执行VMXON(上面Intel手册下面介绍的就是这个)。

      技术图片

     3> 因此借助 第3位来监测主板是否开启VT

      技术图片

  3)2.3.2.2 CR0与CR4固定位

    1> CR0有些位需要进行设置(操作系统已经帮我们设置好了)。

    2> CR4寄存器需要开启VMXE位/13位。(Intel手册卷3 2.5 控制寄存器)

      虽然说了很多,但本质上讲该位置为1,判断也是如此,因此我们使用如下代码判断VT是否开启。

      技术图片

 

二、VMXON区域初始化 2.3.3

  在Intel卷3 31.5 VMM SetUp 中介绍了VMXON开始需要一块非分页内存,并且记录好其物理地址。

  技术图片

  1)我们对每一个核申请一个单独的VMX入口。(注意,这个结构我们日后随着学习的深入会继续补充)

    1> VMX入口数据结构

    技术图片

 

    2> 全局变量对每个核定义一个入口(最多128核)

    技术图片

 

  2)VMXOnArea 存放VMCSID的值(参考2.3.3章节说明),然后我们直接来读取smr来赋值。

    技术图片

 

  3)不同核虽然入口不同,但其共同使用一个VMM区域,因此在不同核处理时,其申请同一个内存且赋上物理地址(猜测!!!不负责!!!!!)

    书上说明:

      技术图片

     实际在每个核中对申请内存的操作: 

      技术图片

 

  4)我们设置前面说的CR4的VMXE位/13位,设置好,之后我们也是通过这个位来监测VT是否开启。

    之后调用微软提供的IntelApi __vmx_on(),来开启VMXON,如果开启成功则返回零(详情查看msdn),如果开启不成功,则直接释放内存。

      技术图片

 

 

VT开启前的检测与开启

标签:set   tar   数据   指令   cpu   物理   opera   ext   href   

原文地址:https://www.cnblogs.com/onetrainee/p/12121100.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!