2

Intelマニュアルには、正規アドレスと一般的な保護の例外について次のように記載されています。

(Vol 1、Pg。3-13)から:

「線形メモリ参照が標準形式でない場合、実装は例外を生成する必要があります。ほとんどの場合、一般保護例外(#GP)が生成されます。...」

(Vol 3A、Pg。6-52)から:

「次の条件により、64ビットモードで一般保護例外が発生します。-
メモリアドレスが非標準形式の
場合。-セグメント記述子のメモリアドレスが非標準形式の場合。...」

上記の引用で述べたように、RIPの内容も「メモリアドレス」として分類されているかどうかを知りたいです。または、RIPに非正規アドレスを含めることができますが、RIPを使用してメモリ内の場所を参照するまで、#GPは発生しませんか?

[編集]

私は今、マニュアル、特にCALL、RET、およびJMP命令の擬似コードをより注意深く読みました(RIPを自由に変更できるため)。64ビットモードでは、アドレスの正規性のチェックがRIPに格納される前に行われ、その結果、RIPが非正規アドレスを取得する前に#GPが発生することに気付きました。したがって、私の質問に対する答えは、RIPに非正規アドレスを含めることはできないということです。

私が心配していた状況---非正規アドレスを含むRIPがメモリ位置を参照するために使用されるために#GPが発生する---まったく発生しません。

4

2 に答える 2

1

RIPには、メモリにアクセスするときにRSPやRBXだけでなく、正規のアドレスも含める必要があります。

編集:RIPが要件から除外されていないことがわかります:

  • SYSENTER/SYSEXITおよびSYSCALL/SYSRETの説明
  • セクション「割り込み13-一般保護例外(#GP)」:If the target offset in a destination operand of a call or jmp is in a non-canonical form.
于 2012-04-27T23:49:03.787 に答える
0

違いは何でしょうか?ジャンプまたは呼び出し命令を介してRIPを設定しようとすると、プロセッサそのアドレスをロードしてトラップしようとします。トラップがレジスタセットにあるように指定されているか、icacheからロードされているかは重要ですか?

于 2012-04-28T04:32:57.513 に答える