このレジスタ (MSR - IA32_VMX_PROCBASED_CTLS2) の出力をダンプして、無制限のゲスト モードがサポート/有効になっているかどうかを確認するにはどうすればよいでしょうか?

このレジスタ (MSR - IA32_VMX_PROCBASED_CTLS2) の出力をダンプして、無制限のゲスト モードがサポート/有効になっているかどうかを確認するにはどうすればよいでしょうか?

このレジスタ (MSR - IA32_VMX_PROCBASED_CTLS2) の出力をダンプして、無制限のゲスト モードがサポート/有効になっているかどうかを確認するにはどうすればよいでしょうか?

文脈は好奇心です。

Mac OSX の場合、そしておそらく Windows の場合も、Docker には無制限モード / 無制限ゲスト モードが必要であることは承知しています。

そして私は読んだ

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

「特定の CPU が無制限ゲストの '1' 設定とその他の仮想化機能をサポートしているかどうかを示す一連の MSR があります。特定の MSR は IA32_VMX_PROCBASED_CTLS2 であり、無制限ゲストはセカンダリ プロセス コントロール VMCS フィールドのビット 7 であると思います。」

PowerShell または wmic で表示されるかどうかはわかりません。Win7 32 ビットにはデバッグ機能があることは知っています (デバッグ機能で表示される可能性がありますか? デバッグで一部のレジスタを表示できることは知っています。デバッグを使用して値を AX レジスタに移動したことがあります)。ただし、Win7 64 ビットを使用しているため、デバッグ機能はありません。

おそらく、アセンブリを少し知っている人なら、そのレジスタのビットを表示するために、どのアセンブラをインストールし、どの行を実行すればよいかを教えてくれるのではないでしょうか。

私は現時点では「スーパーユーザー」の視点からこの問題に取り組んでいるため、stackoverflow で質問するほどアセンブリに精通しているわけではありません。

答え1

Linux用と同様に、WindowsでもMSRを読み書きできるツールがあると思います。msr ツールこのツールは、2つのコマンドrdmsrとを提供しますwrmsr。コマンドを使用してMSRの値を読み取ることができますrdmsr。以下はリンクWindows 用のそのようなツールの 1 つです。

プロセッサベースの実行には、プライマリプロセッサベースのVM実行制御(IA32_VMX_PROCBASED_CTLS)とセカンダリプロセッサベースのVM実行制御(IA32_VMX_PROCBASED_CTLS2)の2つのVM実行制御があります。無制限ゲストモードビットは、(質問ですでに述べたように)の一部ですIA32_VMX_PROCBASED_CTLS2。セカンダリプロセッサベースのVM実行制御は、のビット63が1の場合にのみ使用できますIA32_VMX_PROCBASED_CTLS。(セクション24.6.2を参照)インテルSDM

そこで、まずビット63が1かどうかをチェックする必要がありますIA32_VMX_PROCBASED_CTLSrdmsrビット値が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

コマンドの出力はrdmsr16 進数で、手動でバイナリに変換することも、オンライン ツールを使用して変換することもできます。

ここで、Unrestricted Guest のビットをチェックする必要があります。IA32_VMX_PROCBASED_CTLS2そのためには、位置 7 のビットをチェックする必要があります (次の図を参照)。

IA32_VMX_PROCBASED_CTLS2他のオプションも確認したい場合に備えて、完全な構造を追加します。

ここに画像の説明を入力してください

関連情報