情報科学屋さんを目指す人のメモ(FC2ブログ版)

何かのやり方や、問題の解決方法をどんどんメモするブログ。そんな大学院生の活動「キャッシュ」に誰かがヒットしてくれることを祈って。

ブログ内検索

スポンサーサイト このエントリーを含むはてなブックマーク

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

スポンサー広告 | 編集
このエントリーをはてなブックマークに追加 Clip to Evernote

regsvr32の「依存.DLLファイルに問題がないかを調べてください」について(2) このエントリーを含むはてなブックマーク

今回は、「regsvr32の「依存.DLLファイルに問題がないかを調べてください」について(1)」の続きで、DLLが利用しているDLLを調べる方法についてとりあげます。

詳細は前回の記事参照と言うことで、今回はとにかくRealThumb.dllが参照しているdllを特定することにします。

dumpbin.exe

今回は、dumpbin.exeを利用します。Visual Studioに付属するツールで、Visual Studio の無償版に付属するかは不明です。

dumpbin.exeは、

"C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\dumpbin.exe"
(Windows Vista SP2, Visual Studio 2008)
にあります。

dumpbin.exeをコマンドプロンプトから実行してみる

では、実行してみましょう。コマンドプロンプトから、とりあえず

C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\dumpbin.exe /?
と実行して、dumpbin.exeのオプション一覧の参照しようとすると、

link.exe - コンポーネントが見つかりません

mspdb80.dll が見つからなかったため、このアプリケーションを開始できませんでした。アプリケーションをインストールし直すとこの問題は解決される場合があります。

というエラーが発生した後、Microsoft Incremental Linkerは動作を停止しましたと表示されてしまい、結果としてdumpbin.exeが実行できません

dumpbin.exeの正しい利用方法

このように、dumpbin.exeは、コマンドプロンプトから実行しようとすると、失敗します。

そのため、コマンドプロンプトからではなく、Visual Studio に付属するVisual Studio 用のコマンドプロンプトを利用してください。すべてのプログラム>Microsoft Visual Studio 2008>Tools>Visual Studio 2008 コマンドプロンプトから起動できます。

ここから余談。下の「DLLが参照しているDLLを調べる」へどうぞ。

たとえば、Visual Studio 2008だと、「Visual Studio 2008 コマンド プロンプト」は、

C:\Windows\System32\cmd.exe
にあります。

お気づきの通り、実態は普通のコマンドプロンプトです。実は、スタートメニューのすべてのプログラムからMicrosoft Visual Studio 2008のフォルダのToolsフォルダにある「Visual Studio 2008 コマンドプロンプト」から起動できるのですが、実際は、

%comspec% /k ""C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat"" x86
というコマンドでコマンドプロンプトを起動しているに過ぎません%comspec%は実行ファイルである「C:\Windows\system32\cmd.exe」に展開されます。

ここで、cmd.exeの/kオプションは、続くダブルクオテーションで与えられた引数をコマンドとして実行するオプションです。

つまりこのコマンドでは、vcvarsall.batがx86という引数で実行されます。

vcvarsall.batの内部では今回の引数x86だけではなく、amd64、x64、ia64、x86_amd64、x86_ia64を引数として受け付け、引数に応じたbatファイルを呼び出します。

x86の場合は、vcvars32.batC:\Program Files\Microsoft Visual Studio 9.0\VC\bin\vcvars32.batを呼び出し、さらにvcvars32.batがvsvars32.batC:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\vsvars32.batを呼び出します。

このvsvars32.batの内部で必要な変数を登録しています。変数が登録されたおかげでdumpbin.exeが正しく動くcmd.exeが起動されているわけですね。

ちょっと余談でしたが、とにかくdumpbin.exeを利用するときは、Visual Studio コマンドプロンプトから実行してください。

DLLが参照しているDLLを調べる

ついに、本題です。前述の通り、Visual Studio 2008 コマンドプロンプトを起動して、

C:\(略)\VC>bin\dumpbin.exe /dependents C:\Windows\system32\RealThumb.dll
と実行します。すると、
Microsoft (R) COFF/PE Dumper Version 9.00.21022.08
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file C:\Windows\system32\RealThumb.dll

File Type: DLL

  Image has the following dependencies:

    KERNEL32.dll
    USER32.dll
    GDI32.dll
    ADVAPI32.dll
    ole32.dll
    OLEAUT32.dll
    SHLWAPI.dll
    MSVCR70.dll
    RPCRT4.dll

  Summary

        1000 .data
        1000 .orpc
        3000 .rdata
        1000 .reloc
        4000 .rsrc
        8000 .text
と表示されて、
  • KERNEL32.dll
  • GDI32.dll
  • ADVAPI32.dll
  • ole32.dll
  • OLEAUT32.dll
  • SHLWAPI32.dll
  • MSVCR70.dll
  • RPCRT4.dll
が、RealThumb.dllが参照しているDLLということが分かりました。

次回は、このDLLたちの正体を探ります。

Windowsダンプの極意 エラーが発生したら、まずダンプ解析!
Windowsデバッグの極意 ツールを使いこなして、バグハント!
Debug Hacks -デバッグを極めるテクニック&ツール

Visual Studio | コメント:0 | トラックバック:0 | 編集
このエントリーをはてなブックマークに追加 Clip to Evernote

この記事のコメント

コメントの投稿 エントリの新旧に関わらず、極力18時間中に返信します。














この記事のトラックバック

トラックバックURL:
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。