2012-04-27 5 views
1

インテルマニュアルが正規のアドレスと一般保護例外については、次の言う:非正規のリニアアドレスと一般保護例外

(第1巻、Pgの3-13。)から:

「場合一般的な保護例外(#GP)が生成されます。... "

From(Vol 3A、Pg。6)のリニアメモリリファレンスは標準形式ではありません。 -52):

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

私はRIPの内容もとして分類されているかどうかを知って興味を持って 『上記の引用で述べたように、メモリアドレス』。それとも、RIPを含めることができる場合でありますRIPは、メモリ内の位置を参照するために使用されるまで非正規のアドレスではなく#GPが発生しないのだろうか?

[EDIT]

は、私が今より慎重にマニュアルを読んで、特にCALL、RET、JMP命令の擬似コード(libe RIPを変更するrty)。私は、64ビットモードでは、RIPに格納される前にアドレスの正規化チェックが行われ、その結果、RIPが非正規アドレスを取得する前に#GPが生成されることに気付きました。だから、私の質問への答えは、RIPは決して非正規のアドレスを含むことができないということです。

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

+0

もちろん、プロセッサがRIPアドレスでマシン命令を読み取ることができない場合は何も起こりません。 –

+0

はい、間違いありません。しかし、今のところ私は、プロセッサがRIPによって参照されるアドレスの命令を読み取ることができないことを心配していません。 RIP自体の内容_とそれに関連する例外は現在私の懸念事項です。 – shigoel

答えて

1

RIPには、メモリアクセス時のRSPやRBXだけでなく、標準的なアドレスも含まれている必要があります。

EDIT

  • SYSENTER/SYSEXITとSYSCALL/SYSRET
  • 節「割り込み13 - 一般保護例外の説明(:あなたはRIPがで要件から除外されていません見ることができます#GP)」:If the target offset in a destination operand of a call or jmp is in a non-canonical form.
+0

答えをありがとう。私はあなたの返事を読んだ後に私が見つけたものを含めるように質問を編集しました。 – shigoel

0

どのような違いがありますか?ジャンプ命令またはコール命令でRIPを設定しようとすると、プロセッサにそのアドレスとトラップをロードしようとします。トラップがレジスタセット上にあるか、またはicacheからロードされているかどうかは重要ですか?

+0

私は例外がどこから生じたかを知る必要がありました。その理由は、x86-64プロセッサの一部を正式に指定しようとしており、これらの問題のような詳細があるからです。 – shigoel

+0

そのような区別に頼るのは危険です。このアーキテクチャーではオリジナルのAMD仕様であることを覚えておいてください。実装では、正準アドレス**を必要とする64ビットより小さいRIP **または**負荷でトラップされた全幅レジスタのいずれかを実装することが合法的に**実装できることは妥当と思われます。 –

+0

コメントありがとうございます。私はあなたに完全に同意します(別に、AMDのマニュアルはIntelのものよりも読みやすく、言語は良いので、書式設定やテーブルや図の読み込みがより速い理解に役立ちます)。主なトピックに戻る---私の目標の一部は、実装がアイデアを満たしていることが証明できる限り、実装の多くを気にすることなく正式なアドレスのようなアイデアを表現するように、正式な仕様を「堅牢」にすることです。この目的のために、私はまずそれらの "抽象化"を考えることができる前に実装を研究しています。 – shigoel

関連する問題