• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ベースアドレスの設定について)

ベースアドレスの設定について

このQ&Aのポイント
  • ベースアドレスの設定方法や注意点について解説します。
  • 複数の同時に使用されるdllを作成する場合のベースアドレスの重なり回避方法について説明します。
  • モジュールの高速化のためにベースアドレスを指定する方法について考えます。

質問者が選んだベストアンサー

  • ベストアンサー
  • ttega
  • ベストアンサー率52% (9/17)
回答No.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 のベースアドレスはその後ろに持ってくるだけでオーケーです。 高速化についてのご質問は意図がよく分からないのでパスで。ロード時間がある程度かかるのが許容できるなら、別にロード時に再配置されたって構わないような気がしますが?

noname#113783
質問者

お礼

>>OS の DLL(こいつらはベースアドレスが決まっています)と自分が使用している DLL だけを気にすれば十分 >>次の DLL のベースアドレスはその後ろに持ってくるだけでオーケー 単純にならべるだけでOKなんですね!(64kbで区切るんでしたっけ) 高速化についてはちょっと勘違いしていたので忘れてください。 回答ありがとうございました!

関連するQ&A