• ベストアンサー

VC2005のDLL明示的リンク

VC2005のDLL明示的リンクについて質問です。 <前提> DLLファイルに宣言されている関数(Export関数)が、 4ファンクションあるとします。そのDLLファイルを、 Dependency Walkerで確認すると、以下のようになります。 --------------------------- 関数名 エントリポイント --------------------------- add1 0x00001010 sub2 0x00001030 mul3 0x00001060 div4 0x00001090 <質問> このDLLファイルがexeファイルからLoadLibraryで 読み込まれた場合、プロセスメモリ上には、 上記のエントリポイントの順番で必ず配置されるのでしょうか? 補足ですが、この時、プロセスメモリ上にロードされる位置 は、気にしていません(ベースアドレスは変わることがあるのは認識しています)。 要は、エントリポイントの順番が変わったりしないかを、知りたいです。 <プロセスメモリ上に、エントリポイント順に配置されたイメージ> 0000_0000h --------------------------- (略) --------------------------- add1 --------------------------- sub2 --------------------------- mul3 --------------------------- div4 --------------------------- (略) --------------------------- FFFF_FFFFh <プロセスメモリ上に、エントリポイント順に配置されなかったイメージ> 0000_0000h --------------------------- (略) --------------------------- sub2 --------------------------- add1 --------------------------- div4 --------------------------- mul3 --------------------------- (略) --------------------------- FFFF_FFFFh それとも、こんな感じで、OS依存(実行環境依存)で、色々な配置に なるのでしょうか?

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

  • ベストアンサー
回答No.2

確実なのは以下の1点だけです。 ・DLLのファイルイメージがそのままメモリイメージとなる(OSがバイナリファイルを一気にメモリにロードするため) なのでDependency Walkerが「ファイル上での位置を表示している」なら「メモリ上でも同じ順番」の筈です。

darkness22
質問者

お礼

ご回答ありがとうございます! > OSがバイナリファイルを一気にメモリにロードするため なるほど、そうなると変わらないはずですね。 ありがとうございました。

その他の回答 (1)

  • phoenix343
  • ベストアンサー率15% (296/1946)
回答No.1

そのままのイメージだと思いますけどね。 違うのは、セグメントごとに割り当てるアドレスが違うことぐらいかなと。 だってわざわざ関数の並び順を変える意味が分からない、、(-_-;)

darkness22
質問者

補足

参考意見ありがとうございます。 私もそう思うのですが、確証できる文献がなくて^^; もう少し探してみます。

関連するQ&A