Sto cercando di sviluppare un'applicazione che rileva se il programma è in esecuzione all'interno di una macchina virtuale.Windows 64 bit Rilevamento VMware
Per Windows a 32 bit, ci sono già i metodi spiegati nel seguente link: http://www.codeproject.com/Articles/9823/Detect-if-your-program-is-running-inside-a-Virtual
Sto cercando di adattare il codice in materia di Virtual PC e VMware rilevamento in un sistema operativo Windows a 64 bit. Per VMware, il codice può rilevare correttamente in un sistema operativo Windows XP a 64 bit. Ma il programma si blocca quando lo eseguo in un sistema nativo (sistema operativo Windows 7 a 64 bit).
Inserisco il codice in un file .asm e definisco il passo di generazione personalizzato con il file ml64.exe. Il codice asm a 64 bit di 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
Io chiamo questa parte in un file cpp come:
__try
{
returnValue = IsInsideVM();
}
__except(1)
{
returnValue = false;
}
Grazie in anticipo.
Ebbene sì, il tentativo di accedere alle porte hardware, che è un'operazione privilegiata, verrà intrappolato nel codice utente. È necessario rilevare l'eccezione utilizzando SEH. Sembra che tu stia cercando, ma non hai mostrato (1) opzioni del compilatore o (2) una traccia del debugger. –