cjz2005
_noexcept_
采纳率50%
2020-03-11 10:37 阅读 575

Dev C++嵌入__asm { } 报错

我就加了一个检测是否为虚拟机的函数,像每次加多行汇编老是报错,求解

[Error] expected '(' before '{' token

[Error] 'push' was not declared in this scope

[Error] expected ')' before numeric constant

[Error] expected type-specifier before numeric constant

[Error] expected '{' before numeric constant

[Error] expected ';' before ')' token

BOOL IsInsideVMWare()
{
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
   }
}catch(EXCEPTION_EXECUTE_HANDLER)
{
   rc = false;
}
   return rc;
}
/*
from https://www.codeproject.com/Articles/9823/Detect-if-your-program-is-running-inside-a-Virtual
*/
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

2条回答 默认 最新

  • 已采纳
    caozhy 从今以后生命中的每一秒都属于我爱的人 2020-03-19 12:41
    __asm是VC++的写法(以及汇编本身采用intel写法),不是什么“C++11”,楼下的回答纯属胡说。
    devc++用的g++也可以嵌入汇编,用的是__asm__关键字和at&t语法。
    
    点赞 3 评论 复制链接分享
  • weixin_45425652 吾大佬 2020-03-19 12:38

    Dev-C++不支持C++11,另外很多语言特性都不支持,已经过时了。现在一般是信息学奥赛会用,如果做应用程序开发还是要用VS、VC之类比较流行强大的环境。

    点赞 评论 复制链接分享

相关推荐