我正在尝试开发一个应用程序来检测程序是否在虚拟机中运行。
对于 32 位 Windows,以下链接中已经说明了方法:http: //www.codeproject.com/Articles/9823/Detect-if-your-program-is-running-inside-a-Virtual
我正在尝试在 64 位 Windows 操作系统中调整有关 Virtual PC 和 VMware 检测的代码。对于 VMware,该代码可以在 Windows XP 64 位操作系统中成功检测。但是当我在本机系统(Windows 7 64 位操作系统)中运行它时,程序会崩溃。
我将代码放在 .asm 文件中,并使用 ml64.exe 文件定义自定义构建步骤。64 位 Windows 的 asm 代码为:
IsInsideVM proc
push rdx
push rcx
push rbx
mov rax, 'VMXh'
mov rbx, 0 ; any value but not the MAGIC VALUE
mov rcx, 10 ; get VMWare version
mov rdx, 'VX' ; port number
in rax, dx ; read port
; on return EAX returns the VERSION
cmp rbx, 'VMXh'; is it a reply from VMWare?
setz al ; set return value
movzx rax,al
pop rbx
pop rcx
pop rdx
ret
IsInsideVM endp
我在一个 cpp 文件中称这部分为:
__try
{
returnValue = IsInsideVM();
}
__except(1)
{
returnValue = false;
}
提前致谢。