が 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 アドレスの値を確認できます。これらの値に基づいて、リベースが行われたかどうかを確認できます。