¿Cómo puedo volcar la salida de este registro, el MSR - IA32_VMX_PROCBASED_CTLS2, para ver si el modo invitado sin restricciones es compatible/habilitado?
El contexto es curiosidad.
Soy consciente de que Docker en el caso de Mac OSX, y tal vez en el caso de Windows, requiere el modo sin restricciones/modo de invitado sin restricciones.
y leo
https://software.intel.com/en-us/forums/virtualization-software-development/topic/277958
"Hay una serie de MSR que le indican si una CPU determinada admite la configuración '1' de invitado sin restricciones y una serie de otras características de virtualización. El MSR específico es IA32_VMX_PROCBASED_CTLS2 y creo que el invitado sin restricciones es el bit 7 en los controles de proceso secundarios VMCS campo."
No sé si powershell o wmic lo mostrarán. Sé que Win7 de 32 bits tiene depuración (¿qué podría mostrarlo? Sé que la depuración puede mostrar algunos registros, una vez usé la depuración para mover un valor al registro AX), aunque estoy en Win7 de 64 bits y eso no tiene depuración.
¿Quizás alguien que sepa un poco de ensamblaje pueda mostrar qué ensamblador se necesita instalar y qué líneas ejecutar para mostrar los bits de ese registro?
Realmente no estoy lo suficientemente interesado en el ensamblaje como para preguntar sobre stackoverflow porque en esta etapa estoy abordando esto desde un ángulo de "superusuario".
Respuesta1
Supongo que hay alguna herramienta disponible en Windows para leer y escribir MSR, como existe una para Linux.herramientas-msr. La herramienta le ofrece dos comandos rdmsr
y wrmsr
. Se puede leer el valor de los MSR mediante rdmsr
el comando. Aquí estáenlacea una de esas herramientas para Windows.
Hay dos controles de ejecución de VM para la ejecución basada en procesador: controles de ejecución de VM basados en procesador primario ( IA32_VMX_PROCBASED_CTLS
) y controles de ejecución de VM basados en procesador secundario ( IA32_VMX_PROCBASED_CTLS2
). El bit del modo Invitado sin restricciones es parte de IA32_VMX_PROCBASED_CTLS2
(como ya se mencionó en la pregunta). Los controles de ejecución de VM basados en el procesador secundario están disponibles solo cuando el bit 63 IA32_VMX_PROCBASED_CTLS
es 1. (Consulte la Sección 24.6.2 enIntel SDM)
Entonces, primero debemos leer IA32_VMX_PROCBASED_CTLS
el uso rdmsr
y verificar si el bit 63 es 1 o no. Si el valor del bit es1luego lea IA32_VMX_PROCBASED_CTLS2
usando el mismo comando.
La dirección de ambos MSR es la siguiente:
IA32_VMX_PROCBASED_CTLS - 482H
IA32_VMX_PROCBASED_CTLS2 - 48BH
Comando en Linux:
sudo rdmsr 0x482 // To read IA32_VMX_PROCBASED_CTLS
sudo rdmsr 0x48B // To read IA32_VMX_PROCBASED_CTLS2
La salida del rdmsr
comando está en hexadecimal y podemos convertirla manualmente a binario o podemos usar alguna herramienta en línea para lo mismo.
Ahora necesitamos verificar el bit de Invitado sin restricciones IA32_VMX_PROCBASED_CTLS2
y para eso, debemos verificar el bit en la posición 7 (como se muestra en la siguiente imagen).
Agregando la estructura completa IA32_VMX_PROCBASED_CTLS2
, en caso de que quieras consultar otras opciones también.