- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ベースアドレスの設定について)
ベースアドレスの設定について
このQ&Aのポイント
- ベースアドレスの設定方法や注意点について解説します。
- 複数の同時に使用されるdllを作成する場合のベースアドレスの重なり回避方法について説明します。
- モジュールの高速化のためにベースアドレスを指定する方法について考えます。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
一応 MS 推奨のベースアドレスというのがあります。昔 MSDN で見かけた情報なのですが、今調べても見つけられませんでした。確か rebase のツールの説明あたりから辿れたような気がしたのですが・・・。 大まかに言えば DLL のファイル名の先頭の文字で分類して、A-D は 0x60000000, E-G は 0x61000000 といった具合で 0x69000000 くらいまで使用していたと思います。もちろん、ご自分の DLL に lib1.dll, lib2.dll があれば、lib1 と lib2 がかぶらないように調節してください。 ちなみに、どんなモジュールが配置されるかは確かに分かりませんが、自分のプロセスに関して言えば OS の DLL(こいつらはベースアドレスが決まっています)と自分が使用している DLL だけを気にすれば十分です。というか、他に IME の DLL とかもロードされますが、そこまで含めてコントロールするのは現実的には難しいでしょう。 それから、使用するアドレス空間を算出するには EXE ファイルの構造を知らないといけませんが、実用上は rebase したときにその DLL がどこからどこまでを使用したかが表示されるので、次の DLL のベースアドレスはその後ろに持ってくるだけでオーケーです。 高速化についてのご質問は意図がよく分からないのでパスで。ロード時間がある程度かかるのが許容できるなら、別にロード時に再配置されたって構わないような気がしますが?
お礼
>>OS の DLL(こいつらはベースアドレスが決まっています)と自分が使用している DLL だけを気にすれば十分 >>次の DLL のベースアドレスはその後ろに持ってくるだけでオーケー 単純にならべるだけでOKなんですね!(64kbで区切るんでしたっけ) 高速化についてはちょっと勘違いしていたので忘れてください。 回答ありがとうございました!