WinDBG環境の構築メモ
とりあえず、WinDBG なるものをダウンロード。32bit版と64bit版があるので、とりあえず32bit版を以下のURLからダウンロード。MSI形式のファイルになっているので、そのままインストールで、これは簡単に終了。
Windows 用デバッグ ツール: 概要
http://www.microsoft.com/japan/whdc/devtools/debugging/default.mspx
あと、シンボルってのも必要なんですかね?、とりあえず手元でテスト予定の XP Sp3 のシンボルファイルをダウンロード。ひょっとしてMicrosoft Symbol Serverというのを使えば個別にダウンロードしなくてもよかったり?これはこれで後から設定してみよっと。
とりあえずスターメニューに WinDBG が出てくるので、これを起動すればいいわけですね。
今回はクラッシュダンプファイルを対象にしているので、Open Crash Dump を使えばよさそうですね。と思ったらクラッシュダンプファイルを作ってなかったので、まずは作成。
Win32dd を使ってクラッシュダンプファイルを作成。
C:\temp\win32dd.1.2.20081105>win32dd -d 20090105.dmp
Win32dd - v1.2.20081105 - Kernel land physical memory acquisition
Copyright (c) 2007 - 2008, Matthieu Suiche http://www.msuiche.net
Copyright (c) 2008, MoonSols http://www.moonsols.com
- > Level: 0 - Type: 0
[win32dd] Lets dump it!
[win32dd] Destination: \??\C:\temp\win32dd.1.2.20081105\20090105.dmp
[win32dd] Processing....
これがまた、かなり時間がかかるのと CPU 負荷が高くなります。とりあえずテストなのでローカルのHDDに書き込んでますが、本番ではよくないですね。あと、手元でも発生したことがあるのですが、-d オプション利用中にブルースクリーン(BSOD)になる場合があるようですね。
Multi-Processors and KdVersionBlock
http://www.msuiche.net/2009/01/05/multi-processors-and-kdversionblock/
Win32dd 実行中にブルスクリーンになったら、OS が作成するクラッシュダンプ ファイルを使うってことで(ぉぃ
[win32dd] Physical memory dumped.
Time elapsed is 874 seconds.
[win32dd] Leaving...
なんだかんだ書いている間( 874 秒経過)にクラッシュダンプファイルが完成。
さてと、準備できたのでシンボルのパスを設定してから、Open Crash Dump で作成したダンプファイルをオープン。
Loading Dump File [C:\case\Evidence\20090105.dmp]
Kernel Complete Dump File: Full address space is availableSymbol search path is: SRV*c:\WINDOWS\symbols*http://msdl.microsoft.com/download/symbols
Executable search path is:
KiProcessorBlock[2] could not be read
WaitForEvent failed
うーん、使ったことがないけど、なんとなく何かがおかしい気がする。
試しに win32dd を実行中にブルスクリーンになった時 OS が作成した MEMORY.DMP を指定するとこうなる。
Loading Dump File [C:\case\Evidence\MEMORY.DMP] Kernel Complete Dump File: Full address space is available Symbol search path is: SRV*c:\WINDOWS\symbols*http://msdl.microsoft.com/download/symbols Executable search path is: Windows XP Kernel Version 2600 (Service Pack 2) MP (2 procs) Free x86 compatible Product: WinNt, suite: TerminalServer SingleUserTS Built by: 2600.xpsp_sp2_rtm.040803-2158 Machine Name: Kernel base = 0x804d9000 PsLoadedModuleList = 0x8055e700 Debug session time: Fri Dec 12 13:13:50.703 2008 (GMT+9) System Uptime: 0 days 0:29:08.375 Loading Kernel Symbols ............................................................... ................................................... Loading User Symbols ........... Loading unloaded module list ......... ******************************************************************************* *1231137160* * *1231137161* Bugcheck Analysis * *1231137162* * ******************************************************************************* Use !analyze -v to get detailed debugging information. BugCheck 8E, {c0000005, ba2f9e91, a88ee870, 0} *** ERROR: Module load completed but symbols could not be loaded for win32dd.sys *** ERROR: Module load completed but symbols could not be loaded for win32dd.exe
さっきの Blog に書いたあることに関連しているのかもしれませんが、とりあえず win32dd で作成したのではなく、こっちを練習に使うことにします。
そういえば、Windows ではキーボード操作により任意のタイミングでクラッシュダンプを作成する方法があった気がする。
キーボード操作でメモリ ダンプ ファイルを作成できる Windows の機能
http://support.microsoft.com/kb/244139/ja
残念ながらこの手順は PS2 キーボードでないとダメみたいですね。*1どこかにクラッシュさせるプログラムがあった気がしますが見当たらないなぁ〜。