Как я могу вывести выходные данные этого регистра, MSR - IA32_VMX_PROCBASED_CTLS2, чтобы увидеть, поддерживается ли режим неограниченного гостя?

Как я могу вывести выходные данные этого регистра, MSR - IA32_VMX_PROCBASED_CTLS2, чтобы увидеть, поддерживается ли режим неограниченного гостя?

Контекст это любопытство.

Я знаю, что Docker в случае Mac OSX и, возможно, в случае Windows, требует неограниченного режима / неограниченного гостевого режима.

И я читаю

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

"Существует ряд MSR, которые сообщают вам, поддерживает ли данный ЦП параметр" 1 "неограниченного гостя и ряд других функций виртуализации. Конкретным MSR является IA32_VMX_PROCBASED_CTLS2, и я считаю, что неограниченным гостем является бит 7 во вторичных элементах управления VMCS. поле ".

я не знаю, покажет это как powershell или wmic. Я знаю, что в win7 32bit есть отладка (что может показывать это? Знаете, отладка может показывать некоторые регистры, я однажды использовал отладку для перемещения значения в регистр AX), хотя я нахожусь на win7 64bit и в ней нет отладки.

Возможно, кто-то, кто знает немного ассемблера, может показать, какой ассемблер нужно установить и какие строки запустить, чтобы отобразить биты этого регистра?

Я не совсем достаточно разбираюсь в сборке, чтобы спрашивать о stackoverflow, потому что на этом этапе я подхожу к этому прямо сейчас с точки зрения "суперпользователя".

0 ответов

Я предполагаю, что в Windows есть какой-то инструмент для чтения и записи MSR, как и для Linux msr-tools. Инструмент дает вам две команды rdmsr а также wrmsr , Можно прочитать значение MSR, используя rdmsr команда. Вот ссылка на один такой инструмент для Window.

Существуют два элемента управления выполнением виртуальной машины для выполнения на основе процессора. Элементы управления выполнением виртуальной машины на основе основного процессора (IA32_VMX_PINBASED_CTLS) и средства управления выполнением виртуальных машин на основе вторичного процессора (IA32_VMX_PINBASED_CTLS2). Бит режима Неограниченный гость является частью IA32_VMX_PINBASED_CTLS2 (как уже упоминалось в вопросе). Виртуальные контроллеры исполнения на основе вторичного процессора активны, только когда 31-й бит IA32_VMX_PINBASED_CTLS равен 1. (См. раздел 24.6.2 в Intel SDM)

Итак, нам нужно сначала прочитать IA32_VMX_PINBASED_CTLS с помощью rdmsr и проверьте, равен ли 31-й бит 1 или нет. Если значение бита равно 1, тогда прочитайте IA32_VMX_PINBASED_CTLS2 используя ту же команду.

Адрес для обоих MSR:

IA32_VMX_PROCBASED_CTLS  - 482H
IA32_VMX_PROCBASED_CTLS2 - 48BH

Команда в Linux:

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

Выход для rdmsr Команда указана в шестнадцатеричном формате, и мы можем вручную преобразовать ее в двоичный файл или использовать для этого какой-либо онлайн-инструмент.

Теперь нам нужно проверить бит для неограниченного гостя в IA32_VMX_PROCBASED_CTLS2 и для этого нам нужно проверить бит в позиции 7(как показано на следующем рисунке).

Добавление полного IA32_VMX_PROCBASED_CTLS2 структура, на тот случай, если вы хотите проверить другие варианты тоже.

Другие вопросы по тегам