2

exe内のすべての要素が画像のベースからの相対的なオフセットにある場合、再配置テーブルが必要なのはなぜですか?たとえイメージが0X60000という正のオフセットによってディスカードされたとしても、なぜ新しいテーブルに相対的なRVAを使用しているのでしょうか?exeでの再配置の必要性

答えて

2

ポイントは、コードがRVAまたはwhats-or-everを介してグローバル(グローバル変数と関数アドレス)にアクセスしないことです。彼らはアブソリュートアドレスでアクセスします。また、このアドレスは、実行可能ファイルが優先アドレスでロードされていない場合に変更する必要があります。

再配置テーブルは、これらの場所から正確に構成されています。これは、実際のベースアドレスと優先アドレスの違いによって調整されるべきすべての場所のテーブルです。

通常、DLLとは対照的に、はありません。には再配置テーブルが含まれています。これは、アドレス空間にマップされる最初のモジュールであるため、常に優先アドレスでロードされる可能性があるためです。通常、再配置テーブルが含まれているDLLでは状況が異なります。

P.S. Windows 7では、ランダムアドレスにロードすることを望む場合に備えて、再配置テーブルを含むことがあります。

は、関数のアドレスは、常にそれらの絶対値によってアクセスされていないことに言及しなければならない:それは、セキュリティ機能(哀れな私見)

編集です。 x86の分岐命令(jmpcallなど)には、相対オフセットで動作する「短い」形式があります。そのような場所は移転表で言及されていない。

+0

"コードはグローバル変数(グローバル変数と関数アドレス)にRVAや何があってもアクセスしません" どうすれば可能ですか?グローバル変数は、それ自体がベースからの相対オフセットにあるデータセクションに入りません – user1232138

+0

グローバル変数はEXEデータセクションに格納されます。だから何?それでも彼らは絶対的な仮想アドレスを持っています。グローバル変数にアクセスするサンプルプログラムをコンパイルし、デバッガでコードをチェックするだけです。リンカーがそこに直接アドレスを置くことがわかります – valdo

+0

これには特別な理由はありますか?私はなぜグローバル変数のすべてが相対オフセットにあるのではないかということですか?リンカー作家の人生をもっと楽にしてくれるでしょうか? – user1232138

0

EXEファイルの場合、実行可能イメージは常にその優先アドレスでロードされるため、再配置テーブルは必要ありません。再配置テーブルは安全に削除できます。

関連する問題