¿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?

¿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?

¿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 rdmsry wrmsr. Se puede leer el valor de los MSR mediante rdmsrel 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_CTLSes 1. (Consulte la Sección 24.6.2 enIntel SDM)

Entonces, primero debemos leer IA32_VMX_PROCBASED_CTLSel uso rdmsry verificar si el bit 63 es 1 o no. Si el valor del bit es1luego lea IA32_VMX_PROCBASED_CTLS2usando 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 rdmsrcomando 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_CTLS2y 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.

ingrese la descripción de la imagen aquí

información relacionada