ソフトウェア開発などの開発者がDLLなどのファイルを実行した時、エラーやフリーズした経験がある人は多いでしょう。

こんな時にどう調査すればいいのか、1つ1つ確認していくと時間がかかってしまいます。

この手間を解決できる「Dependency Walker」というツールを使う事で数多くの問題を解決することができるのです。

この記事では「Dependency Walker」の使用方法や赤いアイコン表示の意味、フリーズしたときの対処法などを解説しています。


Dependency Walkerとは

Dependency Walkerは、32bitもしくは64bitのWindows上にある実行可能ファイルの全てを調査します。

また、依存関係にあるモジュールの階層ツリー図を構築・表示できるツールです。


Dependency Walkerで実行できる機能

では、Dependency Walkerで実行できる機能は何があるか、見ていきましょう。

現在の最新バージョン2.2までの実行可能なプログラムは次の通りです。


Windows上にあるモジュールの検出

Windows上で使われているexe・dll・ocxなどの実行可能なファイルを全て調査します。

この調査で、見つかったモジュールによってエクスポートされた関数と依存関係にある他のモジュールの関数の一覧が表示されます。


モジュールのトラブルシューティングが可能

通常は実行できるはずのモジュールが機能しなかった場合、Windows上に存在しないモジュールがある可能性がある事が多いです。

このトラブルを解決するために、無効なモジュールやインポート・エクスポートの不一致などのアプリケーションの問題を検出できます。


他に実行可能な基本的な機能

64bitまたはWindows CEの実行可能なファイルをサポートしています。

CまたはC++でプログラムされているかどうかの検出も行います。


Dependency Walkerの対応機種

2020年現在、Dependency Walkerが対応できる機種は、Windows95・98・NT・2000・XP・2003・Vista・7・8です。

Windows10については一部対応できる部分があります。


Dependency Walkerのインストール方法

Dependency Walkerをどうやって導入するかを解説しましょう。

元々は、Microsoftが開発した無償ツールの1つで、Visual studioに付属されていました。

現在、最新のVisual studioには付属されていません。

Dependency Walkerの開発者本人が開設した公式ページで、任意のツールをインストールすることが可能です。

まずDependency Walker公式サイト(https://www.dependencywalker.com/)に移動します。

そこで「x86用のバージョン2.2.6000」などのDependency Walkerの最新バージョンが並ばれている場所をみてください。

Dependency Walkerのバージョンにはx64、x86、IA64版の3種類が公開されています。

x86は32bit、x64は64bitに対応していますのでお使いの使用PCのバージョンを確認した上でインストールしてください。

インストールが終わったら、Dependency WalkerのZIPファイルを任意のディレクトリに解凍実行しましょう。

depends.exe・depends.dll・depends.chmのファイルが解凍先のディレクトリに作成されます。


Dependency Walkerの使い方

まずは基本的な使い方から解説していきましょう。

depends.exeを実行し、Dependency Walkerの画面が表示されます。

この時、グレーで何も表示されていない状態が正常です。

表示されたのが確認できたら、任意の実行可能なexeファイルを依存関係にあるDLLファイルを検索します。

実行可能ファイルをDependency Walkerの画面にドラッグして、開いてください。

グレー画面から、白い画面に切り替わり、5つの画面に分割されたものが表示されます。

左上のDLLなどのファイル名が表示されている画面は依存関係にあるモジュールの階層ツリー図です。

右上は、PI、Eのエクスポートされた関数の画面になります。左下がモジュール画面、右下がファイルサイズなど表示画面です。

一番下の画面は問題がなければ、空欄ですがエラー報告があれば赤文字でエラーの理由が書かれています。

このような画面になっていたら、一番左上のファイルから開くを選択するか、任意のファイルへのパスを入力・参照してください。

入力・参照できましたら、F7キーを押すか、プロファイルにナビゲートします。

その後、ファイルのパラメータを入力します。特に問題や指示がなければ、全てのチェックボックスを有効化しましょう。

適用後、ファイルを実行します。実行されたファイルが正常にできていれば問題がありません。

Dependency walkerがプロファイリングしているファイルの使用を終了または別の指示が出た場合、Dependency walkerに戻りましょう。

実行されていたファイルのログを保存することができます。


検出されたモジュールの問題を確認・対処

検出されたモジュールの画面では、問題があった場合の確認、対処する必要が出てきます。

一番下の警告・エラー一覧で問題があると指示されていた場合、どういう意味でエラーが起きているか確認・対処方法を解説しましょう。


アイコンの見方

アイコンにはわかりやすく色分けしており、関数画面では「C」、「C++」などの表記のカテゴリー分けされています。


白い四角のアイコン

特に問題のないモジュールです。


緑の長方形アイコン

エクスポートされた関数に問題がありません。グレーの長方形アイコンも同じ状態です。


小さな矢印と四角アイコン

依存関係を示すモジュールだと示しています。


砂時計アイコン

砂時計がついているものは、後からロードされるライブラリです。すぐ使うというわけではないので、砂時計がついているものは問題ありません。


赤いアイコン

モジュール画面では、薄赤の四角のアイコン、関数画面では強めの赤の長方形のアイコンが赤いアイコンです。

砂時計がついていない赤いアイコンがあるとこのままでは動作できません。

この赤いアイコンは、Windows上では実装されていない関数があるということを示しています。

関数画面で任意の赤いアイコンをクリックすると、それぞれのDLLに対応するはずの関数が欠落しているのがわかります。

任意のファイル名と関数名を確認した上で、欠落した関数の必要なプログラムをインストールしてください。

インストールが完了できましたら、F5キーで更新してみましょう。すると、赤いアイコンがなくなり、白い四角となります。


黄色の疑問符アイコン

丸く囲まれた黄色で黒の疑問符が書かれたものが黄色の疑問符アイコンです。

砂時計がついていない疑問符アイコンがあると動作できません。

ほとんどの場合、よく使われているものは疑問符が出ていても動作できます。

しかし、ドライバの場合は動作しない場合がありますのでこの対処方法を見てみましょう。

ファイルが「\system任意の番号\Drivers」にあるのに疑問符が出てきます。

この疑問符が出てきてしまう要因は、Dependency WalkerがDriversフォルダをデフォルトで検索対象にしていないためです

そこで、Dependency Walkerのオプションからモジュールの検索順序の画面を開き、設定を変更します。

画面の一番下にある空欄にDriversを検索してください。

出てきたらDriversを選択し、左側にあるディレクトリ追加をクリックし、順序を上げましょう。

順序が上がったことを確認できたら閉じて、元の画面に戻ってください。

すると、疑問符がなくなり、問題がないことが表示されている事がわかります。


プロファイラーの使い方

これまで基本的な使い方について解説してきましたが、ここではプロ向けのプロファイラーの使い方を解説していきましょう。

プロファイラー機能を使う前に、32bit版や64bit版の実行ファイルを扱う必要があります。

OSに対応したDependency Walkerをインストールしている事を確認してください。


アイコンでどのbitのファイルか判断できる

Dependency Walkerの画面で実行ファイルがどのbit版か確認することができます。

32bitの場合は白い四角アイコンのみで、64bitの場合は白い四角アイコンの右側に縦の青文字で64という数字での表記です。


exeファイルで調査する方法

explorer.exeについて調査したい場合、フォルダーオプションを開いてください。

エクスプローラを別プロセスで実行する」または「別のプロセスでフォルダーウインドウを開く」の設定が有効である事を確認しましょう。

有効でない場合は有効化してください。

有効化しないとプロファイラーを起動した時、二重起動チェックが動作し、プロファイラーが強制終了します。

モジュールのプロファイルのオプション設定で、「プロセスのフックを行う」を有効化すると、詳細ログが取得できます。

しかし、一部のリバースエンジニアリングを禁止しているソフトは強制終了してしまいます。

対象のソフトの調査を行う時、無効にしてください。

「自動的に子プロセスを開く」を有効化しておくと、プロファイルを起動したときにアプリケーション操作で問題がないかのチェックに使えます。


フリーズした時にも対処ができる

Dependency Walkerは、トラブルシューティングもできるツールです

一般的にフリーズした時はタスクマネージャーを起動して該当のファイルを強制終了しますが、何度もフリーズする場合はアプリケーションに問題があります。

問題のあるファイルを、Dependency Walkerで調査してみましょう。

調査の結果によりますが、環境依存エラーやモジュールのマシンタイプの不一致などの問題が出てきます。

使用しているアプリケーションによっては再インストール、または更新を行う必要があります。

モジュールの不足している関数に応じたファイルを追加していく作業を行ってください。


Windows10でのDependency Walker

現在のDependency WalkerはWindows8まで動作が確認されていませんが、10でも動作できます。

しかし、Windows10は非対応の部分があるので対処方法を解説していきましょう。


Dependency Walkerでエラーが出る

Dependency Walkerを開いた時は問題がありません。

調査対象のDLLやexeをドロップして開こうとするとエラーと警告が出る場合があります。

「少なくとも1つに必要な暗黙的または転送された依存関係が見つかりませんでした」のエラーなどが出るでしょう。

使用しているDependency Walkerが問題がなければ、MS APIセットに問題があります。

追加の呼び出し間接化が、Windows7以降から導入されているためです。

Dependency Walkerは現在、開発の更新がWindows8の時点で停止されています。

そのため、最新のAPIセットに対応できず、処理ができません。

この場合のエラーと警告は問題がないようです。


Dependency Walkerの代替ツールがある

エラー以外にWindows10でDependency Walkerを開こうとすると何度もフリーズするケースが多くみられます。

この問題の多くを解決するためにDependency Walkerを書き直した開発者が提供する「Dependencies」のツールがあります。

このDependenciesは2006年に開発停止されていますが、現在のWindows10では機能できているようです。

しかしサポートされていない部分もあり、完全とはいえません。

制限事項があるため、DependenciesはDependency Walkerの機能を再現したものだといえます。

DLLを調査する分には問題がないようです。


まとめ

Dependency Walkerは、開発者にとってDLLやexeの依存関係を調べるのに便利なツールです。

開発したファイルが実際に実行した時、エラーを起こすことが多くあります。

そんな時に使えるDependency Walkerで、必要な関数と導入すべきファイルの把握ができるのです。

またフリーズを起こしやすいアプリケーションに対してもトラブルシューティングを行うことができます。

ぜひ、ソフトウェア開発などのトラブルシューティング、DLLなどの依存関係を調査する時にDependency Walkerを使ってみてください。