小编bug*_*gra的帖子

64位Windows VMware检测

我正在尝试开发一个应用程序,它检测程序是否在虚拟机内运行.

对于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 …
Run Code Online (Sandbox Code Playgroud)

vmware 64-bit assembly detection visual-c++

9
推荐指数
1
解决办法
2718
查看次数

atexit()函数

有几个教程解释了atexit()函数的用法,例如:

http://linux.die.net/man/3/atexit

这些例子以主要功能给出,可以很容易地理解.但是,我正在我的程序中创建一个共享库,我提供了一些从其他程序导出的函数.当另一个程序卸载我的共享库时,我想在共享库中停止一些线程.如何atexit()在不强制用户调用某些功能的情况下在我的共享库实现中使用destroy()?

提前致谢.

c++ linux shared-libraries

2
推荐指数
2
解决办法
1553
查看次数