2

が PE 形式で指定されていることを学んだばかりImageBaseで、OS はそれを の正確な位置にロードします.EXE。次に質問があります。

2 つ.EXEが同じImageBase場所を必要とする場合はどうなりますか?

4

2 に答える 2

3

2つのEXEの場合、それらは完全に異なるアドレス空間を持っています...すべての実行可能ファイルは独自の空間を持っています。つまり、EXEを実行するたびに、4GBアドレス空間に相当する独自の独立した(32ビットシステムでは、プロセスはその一部のみを使用できますが、残りはカーネルに割り当てられます)が割り当てられます。それは仮想アドレス空間です。それはあなたの物理的記憶とは異なります。

したがって、競合はありません。

技術的には、PEはほぼどこにでもロードできますが、デフォルト ImageBase0x400000です。

ここで、EXEがあり、いくつかのDLL(同じImageBaseを持っている)をロードするとします...この場合、最初のDLLは正常にロードされ、2番目のDLLは再配置(または「リベース」)されます。各DLLには.reloc、コード内の参照の更新に関するデータを含むセクションがあります。

于 2010-09-18T08:56:52.810 に答える
1

Process Explorerを使用して、実行中のアプリケーション (DLL を含む) の ImageBase および Base アドレスの値を確認できます。これらの値に基づいて、リベースが行われたかどうかを確認できます。

于 2010-09-18T09:55:05.697 に答える