title: Detecting Virtualization
body: <p>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?</p>
  
  <p>Here is the code works for 32bit VMWare</p>
  
  <p>bool IsInsideVMWare(void)
  {</p>
  
  <p>bool rc = true;</p>
  
  <p>__try</p>
  
  <p>{</p>
  
  <pre><code>__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
  }
  </code></pre>
  
  <p>}
    __except(filter(GetExceptionCode()))</p>
  
  <p>{
      rc = false;
    }</p>
  
  <p>return rc;
  }</p>