仮想マシン上でプログラムが実行されているかどうかを検出するインライン アセンブラ関数があります。ただし、64 ビットのインライン アセンブリは使用できなくなりました。ここでは x64 組み込み関数を使用します。それを検出する別の方法はありますか?
32ビットVMWareで動作するコードは次のとおりです
bool IsInsideVMWare(void) {
bool rc = true;
__試す
{
__asm
{
push edx
push ecx
push ebx
mov eax, 'VMXh'
mov ebx, 0 // any value but not the MAGIC VALUE
mov ecx, 10 // get VMWare version
mov edx, 'VX' // port number
in eax, dx // read port
// on return EAX returns the VERSION
cmp ebx, 'VMXh' // is it a reply from VMWare?
setz [rc] // set return value
pop ebx
pop ecx
pop edx
}
} __except(filter(GetExceptionCode()))
{ rc = 偽; }
rc を返します。}