VMWare ESX

Ainda não testei num hardware apropriado… mas hoje quando fiz um teste rápido com com o VMware ESXi no QEmu percebi que ele detectou “aonde” estava rodando.

6. VMware ESX

Para ver mais screenshots clique aqui.

As CPUs modernas possuem alguns registros especiais dentre os quais há o grupo de instruções: Memory Type Range Registers (MTRRs) que provém um sistema de como o acesso a faixas de memória são transferidas para a cache. Nesse caso a mensagem [No variable MTRRS] indica como o VMware detectou.  [assim que sobrar um tempo irei buscar a fundo o motivo real da virtualização não implementar isso]

Utilizei o seguinte comando para rodar o Qemu:

./qemu -cpu coreduo -m 1500 \
 -hda vm.cow \
 -cdrom VMware-VMvisor-InstallerCD-3.5.0_Update_4-153875.i386.iso

A título de exemplo,  vejam um programa para detectar se o seu programa está em uma máquina virtual (no caso VMware):

#include <stdlib.h>
#include <unistd.h>
#include <signal.h>

#define MAGIC 0x564d5868 /* "VMXh" */
#define PORT 0x5658       /* "VX" */
#define GETVERSION 0x0a

static char *versions[] =
  {"??","Express","ESX Server","GSX Server","Workstation" };

static int vlen[] = {2,7,10,10,11};

static void segfault(){
    write(1,"Not a VMware box.\n",18);
    exit(1);
}

int main(){
    unsigned int ok, ver, magic;

    signal(11, segfault);
    __asm__ __volatile__ (" \
         push %%ebx          \n\
         in %%dx, %%eax      \n\
         mov %%ebx, %1       \n\
         pop %%ebx           \n\
       "
       : "=a"(ok), "=m"(magic), "=c"(ver)
       : "0" (MAGIC), "c" (GETVERSION), "d" (PORT)
    );

    if (magic == MAGIC) {
       write(1, "VMware ", 7);
       if (ok == 6) {
               write(1, versions[ver], vlen[ver]);
               write(1, "\n", 1);
       }
       else write(1, "unknown\n",8);
    }
    else write(1, "Not vmware\n",11);
    exit(0);
}

Isso foi só um motivacional. Isso é assunto para outros posts, ainda estou aprendendo as metodologias utilizadas em virtualização,  esperem em breve posts com temas interessantíssimos.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: