プログラムが仮想マシン内で実行されているかどうかを検出するアプリケーションを開発しようとしています。64ビットWindows VMware検出
は、32ビットWindowsの場合は、方法は次のリンクで説明既に存在している:私は、64ビットのWindowsオペレーティングシステムの仮想PCとVMware検出に関するコードを適応しようとしています http://www.codeproject.com/Articles/9823/Detect-if-your-program-is-running-inside-a-Virtual
。 VMwareの場合、コードはWindows XP 64ビットOSで正常に検出できます。しかし、ネイティブシステム(Windows 7の64ビットOS)でプログラムを実行すると、プログラムがクラッシュします。
コードを.asmファイルに置き、ml64.exeファイルでカスタムビルドステップを定義します。 64ビットWindows用のasmコードは次のとおりです。事前に
__try
{
returnValue = IsInsideVM();
}
__except(1)
{
returnValue = false;
}
ありがとう:
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ファイルでこの部分を呼び出します。
Joannaから古い 赤色ピルが動作できる
いいえ、特権操作であるハードウェアポートにアクセスしようとすると、ユーザーコードがトラップされます。 SEHを使用して例外をキャッチする必要があります。試しているようですが、(1)コンパイラオプションや(2)デバッガトレースが表示されていません。 –