が PE 形式で指定されていることを学んだばかりImageBase
で、OS はそれを の正確な位置にロードします.EXE
。次に質問があります。
2 つ.EXE
が同じImageBase
場所を必要とする場合はどうなりますか?
が PE 形式で指定されていることを学んだばかりImageBase
で、OS はそれを の正確な位置にロードします.EXE
。次に質問があります。
2 つ.EXE
が同じImageBase
場所を必要とする場合はどうなりますか?
2つのEXEの場合、それらは完全に異なるアドレス空間を持っています...すべての実行可能ファイルは独自の空間を持っています。つまり、EXEを実行するたびに、4GB
アドレス空間に相当する独自の独立した(32ビットシステムでは、プロセスはその一部のみを使用できますが、残りはカーネルに割り当てられます)が割り当てられます。それは仮想アドレス空間です。それはあなたの物理的記憶とは異なります。
したがって、競合はありません。
技術的には、PEはほぼどこにでもロードできますが、デフォルト ImageBase
は0x400000
です。
ここで、EXEがあり、いくつかのDLL(同じImageBaseを持っている)をロードするとします...この場合、最初のDLLは正常にロードされ、2番目のDLLは再配置(または「リベース」)されます。各DLLには.reloc
、コード内の参照の更新に関するデータを含むセクションがあります。
Process Explorerを使用して、実行中のアプリケーション (DLL を含む) の ImageBase および Base アドレスの値を確認できます。これらの値に基づいて、リベースが行われたかどうかを確認できます。