2012-03-14 18 views
0

ローダーが、リンカーによって想定されたアドレスとは異なるアドレスにexeをロードすることがあると言われています。ローダーがそうするケースは何ですか?ローダーが目的の場所にロードされない理由

+1

あなたはどのような問題を解決しようとしていますか? –

+0

ローダーがいくつかの望ましくない場所にファイルを読み込むことはまれである場合は、多分私はいくつかの他の目的のために.relocセクションを使用することができます... – user1232138

+1

私はそれをお勧めしません。 Win32 PE EXEファイルは(DLLとは異なり)現在再配置されていませんが、 '.reloc'セクションにランダム情報を格納することはお勧めできません。 –

答えて

2

基本的に、これは次のような状況で行われます。画像をロードすることを好むれる

  1. アドレスがすでに占有されています。たとえば、そこに別のイメージが既にロードされている可能性があります。
  2. ロードするイメージは、ASLRを有効にしてコンパイルされています。
  3. FLG_LDR_TOP_DOWNグローバルフラグが設定されているため、可能な限り高いアドレスにモジュールがロードされます。
+0

"グローバルフラグエディタ"(別名GFLAGS.exe)ツールのコンテキストで使用されるFLG_LDR_TOP_DOWNは、通常、顧客のマシンにはインストールされません。さらに、このツールはx64診断用です。 – mox

+0

EXEがアドレス空間に最初に存在するため(つまり、ntdllとヒープの前であっても)、ASRRedでなくTOP_DOWNでない場合、ローダーはEXEを間違ったアドレスにロードしません。 EXEが無効なユーザーモードアドレスを持っている場合、プロセスはこの場合起動しないので、EXEは常にASLRを好まず、TOP_DOWNを使用しないという条件で、お気に入りのアドレスを取得します。 – SecurityMatt

関連する問題