views:

54

answers:

1

I have an inline assembler function detects program runs on Virtual Machine or not. But in 64bit inline assembly is not available anymore, here x64 intrinsics now. Is there another way for detecting it?

Here is the code works for 32bit VMWare

bool IsInsideVMWare(void) {

bool rc = true;

__try

{

__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 = false; }

return rc; }

A: 

Thanks to a responder i found a way creating a function using assembly language and separate these function as .asm file and adding it to my solution. Here is the problem :) I don't know how to convert these code properly to compile with masm (ml.exe) in VS.

togikan