如何轉儲此暫存器 MSR - IA32_VMX_PROCBASED_CTLS2 的輸出,以查看是否支援/啟用不受限制的訪客模式?

如何轉儲此暫存器 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 告訴您給定的CPU 是否支援不受限制的來賓的『1』設定以及許多其他虛擬化功能。特定的MSR 是IA32_VMX_PROCBASED_CTLS2,我相信不受限制的來賓是輔助proc 控制VMCS 中的位7場地。

我不知道 powershell 或 wmic 是否會顯示它。我知道win7 32位元有debug(可能會顯示它?知道debug可以顯示一些暫存器,我曾經使用debug將一個值移到AX暫存器),儘管我使用的是win7 64位元並且沒有debug。

也許了解一點彙編的人可以顯示需要安裝什麼彙編程式以及運行哪些行來顯示該暫存器的位元?

我對彙編還不太了解,無法在 stackoverflow 上提問,因為在這個階段我是從「超級用戶」的角度來解決這個問題的。

答案1

我假設 Windows 中有一些可用的工具來讀寫 MSR,就像 Linux 上有一個工具一樣msr工具。該工具為您提供了兩個命令rdmsrwrmsr。可以使用rdmsr指令讀取 MSR 的值。這是關聯一個這樣的 Window 工具。

有兩種用於基於處理器的執行的 VM 執行控制 - 基於主處理器的 VM 執行控制 ( IA32_VMX_PROCBASED_CTLS) 和基於輔助處理器的 VM 執行控制 ( IA32_VMX_PROCBASED_CTLS2)。無限制訪客模式位是IA32_VMX_PROCBASED_CTLS2(如問題中已經提到的)的一部分。僅當位元 63 為 1 時,基於輔助處理器的 VM 執行控制才可用IA32_VMX_PROCBASED_CTLS英特爾SDM

所以我們需要先讀取IA32_VMX_PROCBASED_CTLSrdmsr檢查第63位是否為1。如果該位元值為1然後IA32_VMX_PROCBASED_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是十六進制的,我們可以手動將其轉換為二進制,或者可以使用一些線上工具進行相同的操作。

現在我們需要檢查 Unrestricted Guest in 的位IA32_VMX_PROCBASED_CTLS2,為此,我們需要檢查位置 7 處的位元(如下圖所示)。

添加完整的IA32_VMX_PROCBASED_CTLS2結構,以防萬一您也想檢查其他選項。

在此輸入影像描述

相關內容