プログラムが仮想マシン内で実行されているかどうかを検出するアプリケーションを開発しようとしています。
32 ビット Windows の場合、次のリンクで説明されている方法が既にあります 。
64 ビット Windows オペレーティング システムでの Virtual PC および VMware 検出に関するコードを適応させようとしています。VMware の場合、コードは Windows XP 64 ビット OS で正常に検出できます。しかし、ネイティブ システム (Windows 7 64 ビット OS) で実行すると、プログラムがクラッシュします。
コードを .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 rdx
ret
IsInsideVM endp
この部分を cpp ファイルで次のように呼び出します。
__try
{
returnValue = IsInsideVM();
}
__except(1)
{
returnValue = false;
}
前もって感謝します。