メモリダンプに !analyze -v するまで・後編 ~ ダンプを開く~

WDKなみなさま、お元気ですか。さなえすです。

 

前回の原稿を書いていて思い出したのですが、私が Windows Kernel の世界に入門したばかりの頃のことです。メモリ ダンプ ファイルというものに初めて触れた時、先輩から『…じゃあ、とりあえずビックリアナライズハイフンブイしてみて。』と言われた時は、状況が飲み込めず『???』という感じだった事を覚えています。私の様子に気づいた優しい先輩がその後にきちんとフォローしてくれたおかげで、『(カーネルデバッガーで、メモリダンプ ファイルを開いて)”!analyze -v” コマンドを打ってみて』ということだと理解できたのですが。ちなみに、経験則から言うと、“!” は、日本語では “びっくり”、英語では “Bang” (バング)と読むみたいですね。

 

さて、前回に引き続き、メモリダンプ ファイルのお話です。

 

「メモリダンプに !analyze -v するまで・後編 ~ ダンプを開く~」

 

3. WinDBG でダンプファイルを開こう!

毎度おなじみ WinDbgを使って、メモリ ダンプ ファイルを開きましょう。

WinDBG を起動し、[File]>[Open Crash Dump] で解析したいダンプ ファイルを開きます。 (ファイルを Drug & Drop するだけでも開けます。)

 

 OpenDump

 

なお、既にご存知かとは思いますが、最新版の WinDbg は、以下のサイトで提供されています。

- Install Debugging Tools for Windows 32-bit Version

( http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx )

- Install Debugging Tools for Windows 64-bit Version

( http://www.microsoft.com/whdc/devtools/debugging/install64bit.mspx )

 

4. シンボルファイルの設定

さて、次は シンボルファイル の設定についてですが、その前に シンボル ファイルについて、ちょっとだけ触れておきましょう。シンボル ファイルとは、デバッグに必要な情報(シンボル)が含まれたファイルのことで、拡張子は “*.pdb” (Program DataBase files の略) です。WinDBG などのデバッガーはこのシンボル ファイルを使って、関数名、パラメータ名、型情報などを解決しています。逆に、シンボルファイルが無いと、型情報も、関数の先頭も、何もかも自力でアセンブラの中から探し出さなくてはいけません。シンボルファイルが無いと絶対にデバッグできないというわけではないですが、少なくとも母国語がアセンブラだという方以外は、必要なのではないかと思います。

 

それから、デバッグ時に大切なことは、完全に“マッチング“ するドライバー ファイルとシンボル ファイルを使う必要がある、ということです。ドライバー ファイルとシンボル ファイルは、言ってみれば同時に産みおとされた双子みたいなもので、GUIDが一致するのは一緒にビルドされたペアだけです。「そんなことを言ったら、ドライバーをビルドする毎に、シンボルを取っておかないといけないじゃないか!」と思われるかもしれませんが、その通りです!!そんなわけでシンボルファイルは**大変重要**ですので、保存・管理してください。

というわけで、話が長くなってしまいましたが、忘れないうちにシンボルファイルを設定しておきましょう。シンボルファイルの設定では、WEBシンボルサーバーがおススメです。WEB シンボル サーバーの正しい説明は、以下のドキュメントの “Microsoft Symbol Server について” に譲りますが、要は、「WEB 上で公開されている マイクロソフトのモジュールのシンボルファイルを、必要な時に自動的にダウンロードできるから、マッチングするシンボルファイルをいちいち探す手間が省けるわ♪」という便利なものです。

 

- デバッグ ツールとシンボル: はじめに

http://www.microsoft.com/japan/whdc/DevTools/Debugging/debugstart.mspx

 

 

WEB シンボルを利用する場合は、まず、WEB シンボルをキャッシュするフォルダを作成します。

 

(例) C:\websymbols

 

そして、WinDbg の [File] --> [Symbol File Path...]を選択しダイアログを表示し、以下を入力します。

 

SRV*c:\websymbols*http://msdl.microsoft.com/download/symbols

 

 Symbol

 

マイクロソフトのWEB シンボルサーバーには、マイクロソフトのモジュールのシンボルファイルしかありません。それなので自分のドライバーのシンボルファイルも忘れずに参照できるようにしておきましょう。[Browse] ボタンより、シンボルファイルへのパスを指定します。そして [Reload] のチェックボックスにチェックをして [OK] ボタンを押しシンボルファイルをロードします。

 

また、シンボルファイルは、パッケージ毎にダウンロードする事も可能です。ダウンロードはこちらからできます。

- Download Windows Symbol Packages

http://www.microsoft.com/whdc/devtools/debugging/symbolpkg.mspx#Windows%20symbol%20packages

 

さて、現在ロードされているシンボルがあっているどうかをチェックしましょう。コマンドから "lml" と入力します。

 

(出力例)

kd> lml

start end module name

804d0000 806b3f00 nt (pdb symbols) c:\websymbols\ntoskrnl.pdb\DA37FCA19A614EB98EE2A3CF30E625392\ntoskrnl.pdb

806b4000 806c7280 HAL (pdb symbols) c:\websymbols\halacpi.pdb\B92CEB9A1C0A4A46AC6E976BFAAF96A91\halacpi.pdb

bf800000 bf9b7580 win32k (pdb symbols) c:\websymbols\win32k.pdb\5E73CB57D2324134AEF3B2AF1A12995A2\win32k.pdb

bff40000 bff4ec40 neo20xx_bff40000 T (pdb symbols) c:\websymbols\neo20xx.pdb\3ABB2CB91\neo20xx.pdb

bff80000 bff90a80 dxg (pdb symbols) c:\websymbols\dxg.pdb\876DA492608645F1B031E0D68305C3CE1\dxg.pdb

fbd48000 fbd98a80 srv (pdb symbols) c:\websymbols\srv.pdb\8DDB0EC4B52C44199EF8711F8BB49C242\srv.pdb

fbe39000 fbe63280 mrxdav (pdb symbols) c:\websymbols\mrxdav.pdb\CBF153D53DA446098DF5F51B864575D31\mrxdav.pdb

fbf5b000 fbf6e700 wdmaud (pdb symbols) c:\websymbols\wdmaud.pdb\44381AD641354CAC93EC0576E2CA06A12\wdmaud.pdb

               :

 

このような感じで表示されることと思います。WEBシンボルがロードされていれば、上記のように c:\websymbols\ フォルダ以下のキャッシュファイルが参照されます。シンボルは正しくロードできていましたでしょうか? 

 

同様に、WinDbg の [File] --> [Source File Path...] から、ソースファイルパスを指定することができますので、ソースコードも設定しておきましょう。

 

5 .!analyze –v

冒頭の 『ビックリアナライズハイフンブイ』の正体である “!analyze –v” は、自動解析コマンド “!analyze” の “-v (verbose)モード” での実行を意味しています。コマンド(下のほうに “kd>” とあります)から “!analyze –v” と打ってみましょう。

 

 Dump

 

そうすると ストップコードや、パラメータ、コールスタック、(ちなみに上の例では、コールスタックを表示するために、kvn コマンドを打っております)問題を起こした可能性のあるモジュール、問題のソースコードの箇所などが自動で解析されます。あてにならないこともありますが、 “!analyze –v” だけで、問題が解決してしまうこともある (かも?)コマンドです。

 

さて、あなたが遭遇していたブルースクリーンの原因は何でしたでしょうか?

もし、メモリダンプ ファイルを前にして、次の一手が分からない時には、WDK サポート窓口までお問い合わせをいただければ嬉しいです。

 

それでは、また!