Como posso despejar a saída deste registro, o MSR - IA32_VMX_PROCBASED_CTLS2, para ver se o modo convidado irrestrito é suportado/habilitado?

Como posso despejar a saída deste registro, o MSR - IA32_VMX_PROCBASED_CTLS2, para ver se o modo convidado irrestrito é suportado/habilitado?

Como posso despejar a saída deste registro, o MSR - IA32_VMX_PROCBASED_CTLS2, para ver se o modo convidado irrestrito é suportado/habilitado?

Contexto é curiosidade.

Estou ciente de que o Docker, no caso do Mac Osx, e talvez no caso do Windows, requer modo irrestrito/modo convidado irrestrito.

E eu li

https://software.intel.com/en-us/forums/virtualization-software-development/topic/277958

"Há uma série de MSRs que informam se uma determinada CPU suporta a configuração '1' de convidado irrestrito e uma série de outros recursos de virtualização. O MSR específico é IA32_VMX_PROCBASED_CTLS2 e acredito que o convidado irrestrito é o bit 7 no processo secundário controla VMCS campo."

não sei se o PowerShell ou o WMIC mostrarão isso. Eu sei que o win7 32 bits tem depuração (o que pode mostrá-lo? Sei que a depuração pode mostrar alguns registros, uma vez usei o debug para mover um valor para o registro AX), embora eu esteja no win7 64 bits e isso não tenha depuração.

Talvez alguém que conheça um pouco de assembly possa mostrar qual assembler é necessário instalar e quais linhas executar para exibir os bits desse registro?

Eu não sou realmente o suficiente em montagem para perguntar sobre stackoverflow porque neste estágio estou chegando a isso agora de um ângulo de 'superusuário'.

Responder1

Presumo que exista alguma ferramenta disponível no Windows para ler e escrever MSRs, assim como existe uma para Linuxferramentas msr. A ferramenta oferece dois comandos rdmsre wrmsr. Pode-se ler o valor dos MSRs usando rdmsro comando. Aqui estálinkpara uma dessas ferramentas para o Windows.

Existem dois controles de execução de VM para execução baseada em processador: controles de execução de VM baseados em processador primário ( IA32_VMX_PROCBASED_CTLS) e controles de execução de VM baseados em processador secundário ( IA32_VMX_PROCBASED_CTLS2). O bit do modo Convidado Irrestrito faz parte IA32_VMX_PROCBASED_CTLS2(como já mencionado na pergunta). Os controles de execução de VM baseados no processador secundário estão disponíveis somente quando o bit 63 IA32_VMX_PROCBASED_CTLSé 1. (Consulte a Seção 24.6.2 emIntel SDM)

Portanto, precisamos primeiro ler IA32_VMX_PROCBASED_CTLSusing rdmsre verificar se o bit 63 é 1 ou não. Se o valor do bit for1então leia IA32_VMX_PROCBASED_CTLS2usando o mesmo comando.

O endereço de ambos os MSRs é o seguinte:

IA32_VMX_PROCBASED_CTLS  - 482H
IA32_VMX_PROCBASED_CTLS2 - 48BH

Comando no Linux:

sudo rdmsr 0x482 // To read IA32_VMX_PROCBASED_CTLS
sudo rdmsr 0x48B // To read IA32_VMX_PROCBASED_CTLS2

A saída do rdmsrcomando está em hexadecimal e podemos convertê-la manualmente para binário ou usar alguma ferramenta online para o mesmo.

Agora precisamos verificar o bit de Unrestricted Guest in IA32_VMX_PROCBASED_CTLS2e para isso precisamos verificar o bit na posição 7 (conforme mostrado na imagem a seguir).

Adicionando a estrutura completa IA32_VMX_PROCBASED_CTLS2, caso queira verificar outras opções também.

insira a descrição da imagem aqui

informação relacionada