我正在尝试开发一个应用程序,它检测程序是否在虚拟机内运行.
对于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) 有几个教程解释了atexit()函数的用法,例如:
http://linux.die.net/man/3/atexit
这些例子以主要功能给出,可以很容易地理解.但是,我正在我的程序中创建一个共享库,我提供了一些从其他程序导出的函数.当另一个程序卸载我的共享库时,我想在共享库中停止一些线程.如何atexit()在不强制用户调用某些功能的情况下在我的共享库实现中使用destroy()?
提前致谢.