我想開發一個應用程序,檢測程序是否在虛擬機內運行。64位窗口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的彙編代碼是:
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 rdx
ret
IsInsideVM endp
我在一個CPP文件調用此部分,如:提前
__try
{
returnValue = IsInsideVM();
}
__except(1)
{
returnValue = false;
}
感謝。
嗯,是的,試圖訪問硬件端口,這是一種特權操作,將陷阱的用戶代碼。您需要使用SEH捕獲異常。它看起來像你正在嘗試,但你沒有顯示(1)編譯器選項或(2)調試器跟蹤。 – 2012-04-10 14:03:18