检测虚拟化

发布于 2024-09-11 17:30:17 字数 712 浏览 7 评论 0原文

我有一个内联汇编器函数来检测程序是否在虚拟机上运行。但在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

几味少女 2024-09-18 17:30:17

感谢响应者,我找到了一种使用汇编语言创建函数并将这些函数分离为 .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.

放血 2024-09-18 17:30:17

这是 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...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文