DLLに入っている関数

WindowsのDLLファイルには関数が詰まっているとのことですが,どういう関数が入っているのか見る方法はあるのでしょうか。


Windowsに標準で添付されているクイックビューアを使うのが,最も簡単です。中に入っている関数を閲覧したいDLLファイルを選択し,右クリックで出現するコンテキストメニューの中から「クイックビューア」を選択します。
 DLLのファイル形式は,Windowsの実行ファイル形式と同一です。32ビットコードと16ビットコードの2種類があり,両者で異なる情報が表示されます。
 32ビットと16ビットの違いは,クイックビューアの冒頭部分で区別できます。32ビットではイメージファイルヘッダ(Win32が使用しているCOFFバイナリコード形式のヘッダ部分)の情報が表示されるのに対して,16ビットのDLLでは「Technical File Information」の部分にオペレーティングシステムメMicrosoft Windowsモ,Windowsバージョンメ3.1モと表示されます。また,16ビットの場合は,EXEファイルヘッダに埋め込まれているデータセグメント,コードセグメントなどの情報が表示されますが,32ビットのDLLにはセグメント関連の情報はありません。
 質問にある,そのDLLが公開している関数(外部から呼び出すことができる関数)の名前は「Export Table」(16ビットではExport Functionsというコメントが付いている部分)に一覧されています。また,逆にそのDLLが使用する外部関数(別のDLLに含まれる)は「Import Table」に列挙されています。Windows APIを収めているGDI.DLLやUSER.DLLをクイックビューアで見ると,Windows APIの関数名が一覧できるはずです。
 クイックビューアは,そのほかにさまざまな情報を表示してくれますが,これらの詳細を理解するには,Windowsが使用している実行ファイル(バイナリ)の形式を理解する必要があります。
 Windowsは32ビット以降,COFFと呼ばれる共通バイナリフォーマット(COFFはUNIX SystemX Release3のバイナリフォーマットです)形式を採用しました。COFF形式は,複数の再配置可能なセクション(セクションというのは,例えばプログラムコードセクション,データセクションなどを指します)で構成されており,DLLのようなダイナミックにリンクされるライブラリを容易に表現できる特徴があります。
 COFF形式について詳しく知りたいなら,マイクロソフトの技術資料を参照するとよいでしょう。また,多くのUNIXは現在,COFFの次の世代にあたるELFバイナリフォーマットを使用しており,インターネットで公開されたドキュメントを読むことができます。ELFについては,例えばhttp://www.is.kochi-u.ac.jp/~95i44/debian/elf_doc_sgml_ja/elf_doc.html#toc1あたりを参照するといいのではないかと思います。
(米田 聡)


クイックビューアで32ビットのDLLを開いてみた


こちらは16ビットのDLLを開いた例