C++ windows 8任务管理器虚拟化选项
我正试图找到一种方法,以编程方式检测我的程序是否在虚拟机上运行,据我所知,并行程序没有通用的方法来实现这一点C++ windows 8任务管理器虚拟化选项,c++,windows,virtual-machine,vmware,parallels,C++,Windows,Virtual Machine,Vmware,Parallels,我正试图找到一种方法,以编程方式检测我的程序是否在虚拟机上运行,据我所知,并行程序没有通用的方法来实现这一点 Windows 8任务管理器性能选项卡显示“虚拟化”选项,这是什么意思?当我在虚拟机中运行windows 8时,它会变为虚拟处理器和虚拟机:是的,那么windows 8如何检测到它在虚拟机中运行,windows 8如何检测到它在虚拟机中运行?是否可以通过编程方式获取此信息?我在parallels和vm ware上都试过了,都很好。你应该看看这篇有趣的文章Red Pill。。。或者,如何使
Windows 8任务管理器性能选项卡显示“虚拟化”选项,这是什么意思?当我在虚拟机中运行windows 8时,它会变为虚拟处理器和虚拟机:是的,那么windows 8如何检测到它在虚拟机中运行,windows 8如何检测到它在虚拟机中运行?是否可以通过编程方式获取此信息?我在parallels和vm ware上都试过了,都很好。你应该看看这篇有趣的文章
Red Pill。。。或者,如何使用(几乎)一条CPU指令检测VMM,由Joanna Rutkowska编写,该指令过去是,但现在已经死了,只能使用和虚拟化:红色药丸还是蓝色?
编写,由Steven McElwee编写,该指令过去也是,但现在只能查看
代码如下:
int swallow_redpill()
{
unsigned char m[2+4], rpill[] = "\x0f\x01\x0d\x00\x00\x00\x00\xc3";
*((unsigned*)&rpill[3]) = (unsigned)m;
((void(*)())&rpill)();
return (m[5]>0xd0) ? 1 : 0;
}
如果在虚拟机中运行,则返回1,否则返回0
编辑:在现代CPU上,它可能会返回误报,并将其加在一起以确保结果是真实的。在VMware上,您可以检查CD驱动器供应商-应该是“VMware”或“VMware,Inc.”或类似的内容
我不知道VMware workstation,但在ESXi上,您的MAC地址通常以“00:50:56”开头。你也可以利用这个
看一看。也许你可以把它移植到Windows
也许可以帮助您。在我真正的Windows 8上,任务管理器也显示“虚拟化:已启用”。我相信这表明处理器支持虚拟化,而不是操作系统在虚拟机中运行。