2017-03-20 2 views
2

を生成し、ゲストVM命令の次のシーケンスを考えてみましょう:上記の命令のいずれについてもは、命令をプッシュしますEXIT

701: 55  push %rbp 
702: 41 54 push %r12 
704: 41 55 push %r13 

EXITは、何らかの理由で可能ですか? スタックが存在しない場合、PUSHがページフォールトを発生させる可能性があるため、可能です。

私は正しいか間違っていますか?

+1

はい。ページを上げることができます[fault] [1]。 [1]:http://stackoverflow.com/questions/4584089/what-is-the-function-of-the-push-pop-instructions-used-on-registers-in-x86-ass – jhonnash

+1

@Johan RSP - 8が指すページが存在しない(または書き込み不可能であるか無効である)場合、CPUはこれらの命令を実行するときにページフォルトを生成します。 –

答えて

1

私はIntelを引用しているので、暗黙のうちにVT-xテクノロジを参照しています。
AMD-vも同様ですが(特に、例外は依然として傍受されています)。

例外:VMM(VMXルートモードで動作しているプログラム)がそれを許可するようにVMCSを設定している場合


例外はVMExitを引き起こす可能性があります例外(フォルト、トラップ、およびアボート)により、例外ビットマップ(セクション 24.6.3を参照)に基づいてVMが終了します。例外が発生した場合、例外ビットマップ内のビットを選択するために、そのベクトル(0〜31の範囲内)が使用されます。 ビットが1の場合、VM終了が発生します。ビットが0の場合、例外はゲストIDTを介して正常に配信されます。

命令シーケンスで例外が生成された場合、VMExitの可能性が開きます。

は#PFほかpushを生成することができる他の例外がある:

#GP(0)メモリアドレスが非標準形式である場合。
#SS(0)スタックアドレスが非正規形式である場合。
#PF(フォルトコード)ページフォルトが発生した場合。アライメント・チェックがイネーブルにされていて、アライメントが合わないメモリ参照が行われた場合
#AC(0) 現在の特権レベルがRoss Ridgeがコメントで指摘したように3

あるが、VMExitはまた、発生する可能性がEPT(IIRCの場合はAMD用語のネストされたページ)に障害が発生します。
また、#GPは投稿されたスニペットとは関係ありません。

+0

#GPはメモリオペランドを持たないため、指定された命令では実行できません。命令は、基本的にメタページフォルトであるEPT違反/ミスコンフィギュレーションVM出口を引き​​起こす可能性もある。 –

+0

@RossRidge良い点!ありがとう、私は答えを更新しています。 –