VT系列二:检测是否支持虚拟化
来源:互联网 发布:polycom软件下载 编辑:程序博客网 时间:2024/05/20 18:55
本文只是学习此视频后的一些总结 不当之处还请指出
视频作者:小宝来了
视频连接:http://bbs.pediy.com/showthread.php?t=211973
约定:
本文中出现的名词
虚拟机 客户机 GUEST 都是被监控的操作系统或应用程序
宿主机 HOST Hypervisor都是指监控虚拟机的“原”操作系统
VMM:当客户机发生退出事件时,进入的就是VMM
VM:当客户机正常运行时就是VM
VMM监控VM
步骤在Intel手册35.1章
1.使用CPUID指令查看CPU信息
需要关注的是ECX(RCX)寄存器
这里只讲x86
返回的ecx是一个
typedefunion{struct{ unsigned SSE3:1; unsigned PCLMULQDQ:1; unsigned DTES64:1; unsigned MONITOR:1; unsigned DS_CPL:1; unsigned VMX:1; unsigned SMX:1; unsigned EIST:1; unsigned TM2:1; unsigned SSSE3:1; unsigned Reserved:22;}; }_CPUID_ECX;
我们需要判断其中VMX位是否为1 是支持VT 否则不支持
2.查看CR0 CR4控制寄存器
CR0寄存器的PE、PG、NE位必须为1
如果不为1 则是在BIOS中没有启用VT
CR4寄存器的VMXE位是否为1
如果为1则说明已经有VT存在了
用到的结构圷:
typedefunion{struct{ unsigned PE:1; unsigned MP:1; unsigned EM:1; unsigned TS:1; unsigned ET:1; unsigned NE:1; unsigned Reserved_1:10; unsigned WP:1; unsigned Reserved_2:1; unsigned AM:1; unsigned Reserved_3:10; unsigned NW:1; unsigned CD:1; unsigned PG:1; //unsigned Reserved_64:32;}; }_CR0; typedef union{struct{ unsigned VME:1; unsigned PVI:1; unsigned TSD:1; unsigned DE:1; unsigned PSE:1; unsigned PAE:1; unsigned MCE:1; unsigned PGE:1; unsigned PCE:1; unsigned OSFXSR:1; unsigned PSXMMEXCPT:1; unsigned UNKONOWN_1:1; //These are zero unsigned UNKONOWN_2:1; //These are zero unsigned VMXE:1; //It's zero in normal unsigned Reserved:18; //These are zero //unsigned Reserved_64:32;};}_CR4;
3.检查MSR寄存器(MSR_IA32_FEATURE_CONTROL)
MSR_IA32_FEATURE_CONTROL的lock位是否为1
如果不为1则VT指令没有开启无法使用某些VT指令
用到的结构如下:
typedefstruct _IA32_FEATURE_CONTROL_MSR{unsigned Lock :1; // Bit 0 is the lock bit - cannotbe modified once lock is setunsigned Reserved1 :1; //Undefinedunsigned EnableVmxon :1; // Bit 2. Ifthis bit is clear, VMXON causes a general protection exceptionunsigned Reserved2 :29; //Undefinedunsigned Reserved3 :32; //Undefined } IA32_FEATURE_CONTROL_MSR;
代码如下:
#pragma once#include <ntddk.h>#include "vtsystem.h"#include "vtasm.h"BOOLEAN bCheckCpuSuppert(){//1.执行CPUIDULONG uRet_Eax, uRet_Ebx, uRet_Ecx , uRet_Edx;_CR0 cr0;_CR4 cr4;_CPUID_ECX uCpuId_Ecx;IA32_FEATURE_CONTROL_MSR msr;Asm_CPUID(1, &uRet_Eax, &uRet_Ebx, &uRet_Ecx, &uRet_Edx);*((PULONG)&uCpuId_Ecx) = uRet_Ecx;if (uCpuId_Ecx.VMX != 1){DbgPrint("当前CPU不支持VT!\n");return FALSE;}//2.CR0 CR4cr0 = Asm_GetCr0Ex();if (cr0.PE != 1 || cr0.PG != 1 || cr0.NE != 1){DbgPrint("请在Bios里面设置VT选项!\n");return FALSE;}cr4 = Asm_GetCr4Ex();if (cr4.VMXE == 1){DbgPrint("已经有VT啦!\n");return FALSE;}//3.MsrAsm_ReadMsrEx(MSR_IA32_FEATURE_CONTROL, (PMSR)&msr);if (msr.Lock != 1){DbgPrint("VT 指令没有锁定!\n");return FALSE;}DbgPrint("当前CPU支持VT!\n");return TRUE;}
下一章将讲退出事件的分发
0 0
- VT系列二:检测是否支持虚拟化
- 检测cpu是否支持VT
- Linux环境下查看CPU是否支持VT虚拟化 - VT-X或VT-D
- 用SecurAble检测cpu是否支持Intel VT虚拟化技术的LOCKED ON,LOCKED OFF,YES,NO使用说明
- 如何查看 CPU 是否支持硬件虚拟化(VT 技术)
- 查看电脑CPU是否支持VT虚拟化的几个软件
- INTEL CPU 本子 列表 看你的是否支持虚拟化(是否采用了 Intel VT技术)
- 检测cpu是否支持虚拟化和二级地址转换
- Inter VT技术(硬件虚拟化检测)
- 虚拟化 : VT-x VT-d VT-c的分别
- 支持Intel虚拟化技术(Intel VT)的处理器列表
- Intel虚拟化技术-从VT-x到VT-d
- 判断cpu是否支持全虚拟化
- 查看是否支持虚拟化技术
- 查看CPU是否支持虚拟化
- 查看CPU是否支持虚拟化
- 如何查看cpu是否支持虚拟化
- 如何查看CPU是否支持虚拟化
- git与svn对比
- [LeetCode] 140. Word Break II
- RxJava操作符(一)Creating Observables
- Genymotion安装与集成开发指南
- 浙大PAT甲级 1106 广度优先搜索
- VT系列二:检测是否支持虚拟化
- 设置EditText 游标的位置
- iReport报表开发
- RxJava操作符(二)Transforming Observables
- Cassandra入门
- 浅析递推(递推专练题解)
- Android实现网络图片app
- 版本控制——git的一些基本命令杂录(一)
- 一个有趣的问题:可以输出自己的源程序代码(quine)