麻烦帮忙看一上这段代码,判断是否为虚拟机环境
麻烦帮忙看一下这段代码,判断是否为虚拟机环境
bool pr_vm(int v)
{
bool rc = true;
__try
{
__asm
{
push edx
push ecx
push ebx
mov eax, 'VMXh'
mov ebx, 0 // any value but not the MAGIC VALUE
mov ecx, 10 // get VMWare version
mov edx, 'VX' // port number
in eax, dx // read port
// on return EAX returns the VERSION
cmp ebx, 'VMXh' // is it a reply from VMWare?
setz [rc] // set return value
pop ebx
pop ecx
pop edx
}
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
rc = false;
}
if (rc==TRUE)
{
v=1;
}
else
v=0;
return true;
}
------解决方案--------------------
http://bbs.pediy.com/showthread.php?t=119969
慢慢看,都是通过比较取巧的办法啊,不一定靠得住~
------解决方案--------------------
那如果不是VMWare,而是其它虚拟机,你代码还有用吗?
------解决方案--------------------
内嵌汇编啊……
现在已经进入了64位世界,内嵌汇编只能用于 32位 Windows 程序了。
------解决方案--------------------
那如果不是VMWare,而是其它虚拟机,你代码还有用吗?
bool pr_vm(int v)
{
bool rc = true;
__try
{
__asm
{
push edx
push ecx
push ebx
mov eax, 'VMXh'
mov ebx, 0 // any value but not the MAGIC VALUE
mov ecx, 10 // get VMWare version
mov edx, 'VX' // port number
in eax, dx // read port
// on return EAX returns the VERSION
cmp ebx, 'VMXh' // is it a reply from VMWare?
setz [rc] // set return value
pop ebx
pop ecx
pop edx
}
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
rc = false;
}
if (rc==TRUE)
{
v=1;
}
else
v=0;
return true;
}
------解决方案--------------------
http://bbs.pediy.com/showthread.php?t=119969
慢慢看,都是通过比较取巧的办法啊,不一定靠得住~
------解决方案--------------------
那如果不是VMWare,而是其它虚拟机,你代码还有用吗?
------解决方案--------------------
内嵌汇编啊……
现在已经进入了64位世界,内嵌汇编只能用于 32位 Windows 程序了。
------解决方案--------------------
那如果不是VMWare,而是其它虚拟机,你代码还有用吗?