检测虚拟化
我有一个内联汇编器函数来检测程序是否在虚拟机上运行。但在 64 位中,内联汇编不再可用,这里现在是 x64 内在函数。还有其他方法可以检测到吗?
这是适用于 32 位 VMWare 的代码
bool IsInsideVMWare(void) {
布尔 rc = true;
__尝试
{
__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(过滤器(GetExceptionCode()))
{ rc=假; 返回
rc; }
I have an inline assembler function detects program runs on Virtual Machine or not. But in 64bit inline assembly is not available anymore, here x64 intrinsics now. Is there another way for detecting it?
Here is the code works for 32bit VMWare
bool IsInsideVMWare(void)
{
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(filter(GetExceptionCode()))
{
rc = false;
}
return rc;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
感谢响应者,我找到了一种使用汇编语言创建函数并将这些函数分离为 .asm 文件并将其添加到我的解决方案中的方法。这就是问题所在:)我不知道如何正确转换这些代码以在 VS 中使用 masm (ml.exe) 进行编译。
Thanks to a responder i found a way creating a function using assembly language and separate these function as .asm file and adding it to my solution. Here is the problem :) I don't know how to convert these code properly to compile with masm (ml.exe) in VS.
这是 MASM 论坛的问题
http://www.masm32.com/board/index.php?
你对 StackOverflow 的了解有点太深了……
This is a question for the MASM forum
http://www.masm32.com/board/index.php?
you are diving a little too deep for StackOverflow...