DllImportを理解する

DLLを作る事は出来るのに、Importテーブルについて知らない人は結構います。Importテーブルとは、他のDLLの関数を高速に呼び出す為のインデックスです。


インポートテーブルの有無はdumpbinコマンドを利用するのが普通です。例えばnotepadの中にあるテーブルを調査するには以下のようにします。

>dumpbin  notepad.exe /imports

    comdlg32.dll
              10012C4 Import Address Table
              1007990 Import Name Table
              FFFFFFFF time date stamp
              FFFFFFFF Index of first forwarder reference


      763248D6      F PageSetupDlgW
      76318696      6 FindTextW
      76329D29     12 PrintDlgExW


ここで注目してほしいのは、関数のアドレスが直接書かれていることです。通常、DLLから関数を呼び出す時にはLoadLibraryを使って、名前や序数で検索してアドレスを探す事になりますから、このようなテーブルが使えれば関数呼び出しそのものが高速になります。

つまり、自分の作成したEXEから自分のDLLを呼び出すような場合など、テーブルを使っても差し支えの無い場合には積極的に利用するべきでしょう。利用方法が分からないなら調査する価値はあります。

ちなみにVisual C++では__declspce(dllimport)で簡単に利用できます。

なお、Importテーブルを知ったらBaseAddressの知識も必要になります。これは次の機会があったら説明することにします。

Leave a Reply

Be the First to Comment!

Notify of
avatar
wpDiscuz