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 rdmsr
e wrmsr
. Pode-se ler o valor dos MSRs usando rdmsr
o 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_CTLS
using rdmsr
e verificar se o bit 63 é 1 ou não. Se o valor do bit for1então leia IA32_VMX_PROCBASED_CTLS2
usando 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 rdmsr
comando 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_CTLS2
e 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.