ビジネス WinDbgアプリケーション開発技術 イメージロード(ユーザモードとカーネルモード)


WinDbg環境の確認

 前回は「Local」タブを選択し、WinDbgを"コンピュータ"に接続しました。この場合の"コンピュータ"とは、「ローカルコンピュータ」ということであり、現在私たちが使用している「コンピュータ」ということになります。

 WinDbgは、(ハングしている)他のコンピュータに接続し、そのコンピュータ内で動いているプログラムも調査できます。その際には、「Local」タブ以外のタブを選択していきます。本連載では、「ローカルコンピュータ」とそのマシン内で動作しているプログラムを調査していきます。このようなデバッグモードは"ローカルカーネルデバッグ(LKD)モード"と呼ばれ、ブレークポイントが設定できないなどの一部機能上の制限があります。しかし、カーネルスペース内のメモリへの読み書きアクセスは基本的に可能です。より詳細な制限事項については、ヘルプ情報を参照してください。

現在のWinDbg環境を確認する

 それでは、「Local」タブを選択し、「OK」ボタンをクリックしてください。前回紹介したような画面が表示されてくるはずです。画面が表示されたら、画面下の「lkd」欄にversionと入力してください。次のような情報が表示されてくるはずです。
lkd> version
Windows XP Kernel Version 2600 (Service Pack 2) UP Free x86 compatible
Product: WinNt, suite: TerminalServer SingleUserTS
Built by: 2600.xpsp_sp2_gdr.050301-1519
Kernel base = 0x804d9000 PsLoadedModuleList = 0x8055c420
Debug session time: Thu Sep  1 08:26:41.527 2005 (GMT+9)
System Uptime: 0 days 1:29:55.096
Local KD
command line: '"C:\Program Files\Debugging Tools for Windows\windbg.exe" '  Debugger Process 0xB64 
dbgeng:  image 6.5.0003.7, built Wed Jun 22 11:52:20 2005
        [path: C:\Program Files\Debugging Tools for Windows\dbgeng.dll]
dbghelp: image 6.5.0003.7, built Wed Jun 22 11:52:04 2005
        [path: C:\Program Files\Debugging Tools for Windows\dbghelp.dll]
        DIA version: 40416
Extension DLL search Path:
    C:\Program Files\Debugging Tools for Windows\winext;C:\Program Files\Debugging Tools for Windows\winext\arcade;C:\Program Files\Debugging Tools for Windows\WINXP;C:\Program Files\Debugging Tools for Windows\pri;C:\Program Files\Debugging Tools for Windows;C:\Program Files\Debugging Tools for Windows\winext\arcade;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\system32\WBEM;C:\WINDOWS\COMMAND;C:\WINDOWS\COMMANDC:\CPQS\SAVEREST;C:\CPQS\TOOLS;C:\CPQS\SAVEREST;c:\j2sdk1.4.0_02\bin;c:\boost;C:\Program Files\Microsoft SQL Server\80\Tools\Binn\;C:\Program Files\Debugging Tools for Windows;C:\Program Files\Debugging Tools for Windows\clr10;C:\Program Files\Debugging Tools for Windows\winext;C:\Program Files\Debugging Tools for Windows\winxp;c:\ossymbols;c:\Program Files\Microsoft SQL Server\90\Tools\binn\
Extension DLL chain:
    exts: image 6.5.0003.7, API 1.0.0, built Wed Jun 22 11:51:20 2005
        [path: C:\Program Files\Debugging Tools for Windows\WINXP\exts.dll]
    kext: image 6.5.0003.7, API 1.0.0, built Wed Jun 22 11:51:21 2005
        [path: C:\Program Files\Debugging Tools for Windows\winext\kext.dll]
    kdexts: image 6.0.5072.0, API 1.0.0, built Fri Jun 24 09:35:14 2005
        [path: C:\Program Files\Debugging Tools for Windows\WINXP\kdexts.dll]
    dbghelp: image 6.5.0003.7, API 6.0.6, built Wed Jun 22 11:52:04 2005
        [path: C:\Program Files\Debugging Tools for Windows\dbghelp.dll]
    ext: image 6.5.0003.7, API 1.0.0, built Wed Jun 22 11:51:25 2005
        [path: C:\Program Files\Debugging Tools for Windows\winext\ext.dll]

 この情報は、現在使用しているWinDbgに関するバージョン情報です。「Local KD」という動作モード表示があります。この表示は作業内容に応じていろいろに変化します。ユーザモードと「Local KD」モード間の切り替えも可能です。この切り替えをスクリプトコードで記述し、処理の流れを自動化すると、いろいろな内部情報がその場であっという間に取得できます。筆者は、日々作成するWinDbgコマンドスクリプトの先頭には必ずターゲットマシン情報とバージョン情報を表示するWinDbgコマンドを記述しています。
.block
{
	.logappend d:\\windbg\\logs\\toyota_3.log
	.printf "\r\n\r\n *** version *** \r\n"
	version
	.printf "\r\n\r\n *** vertarget *** \r\n"
	vertarget
}

 次に紹介するのは、「Windows Server 2003 Version 3790 (Service Pack 2) UP Free x64」上で作成されたメモリダンプファイルを32ビットのWindows XP SP3上で分析した時に出力されたバージョン関連情報の例です。
  *** version *** 
Windows Server 2003 Version 3790 (Service Pack 2) UP Free x64
Product: Server, suite: Enterprise TerminalServer

kernel32.dll version: 5.2.3790.4062 (srv03_sp2_gdr.070417-0203)
Debug session time: Sat Sep  6 00:15:47.000 2008 (GMT+9)
System Uptime: 1 days 3:53:15.489
Process Uptime: 0 days 0:00:11.000
  Kernel time: 0 days 0:00:00.000
  User time: 0 days 0:00:00.000

Full memory user mini dump: D:\DownLoaded\CrashDumpFiles\LargeHeapAllocations\LargeHeapAllocations.dmp

Microsoft (R) Windows Debugger Version 6.9.0003.113 X86
Copyright (c) Microsoft Corporation. All rights reserved.

command line: '"C:\Program Files\Debugging Tools for Windows (x86)\windbg.exe" '  Debugger Process 0x888 
dbgeng:  image 6.9.0003.113, built Fri Mar 21 10:29:34 2008
        [path: C:\Program Files\Debugging Tools for Windows (x86)\dbgeng.dll]
dbghelp: image 6.9.0003.113, built Fri Mar 21 10:28:43 2008
        [path: C:\Program Files\Debugging Tools for Windows (x86)\dbghelp.dll]
        DIA version: 21024
Extension DLL search Path:
    
  *** Omitted ***

Extension DLL chain:
    C:\WINDOWS\System32\hhctrl.ocx: image 5.2.3790.4110, built Mon Apr 14 11:24:07 2008
        [path: C:\WINDOWS\System32\hhctrl.ocx]
    C:\Program Files\Debugging Tools for Windows (x86)\winext\logexts: image 3.01, API 0.0.5, built Fri Mar 21 10:30:07 2008
        [path: C:\Program Files\Debugging Tools for Windows (x86)\winext\logexts.dll]
    dbghelp: image 6.9.0003.113, API 6.1.6, built Fri Mar 21 10:28:43 2008
        [path: C:\Program Files\Debugging Tools for Windows (x86)\dbghelp.dll]
    ext: image 6.9.0003.113, API 1.0.0, built Fri Mar 21 10:28:43 2008
        [path: C:\Program Files\Debugging Tools for Windows (x86)\winext\ext.dll]
    exts: image 6.9.0003.113, API 1.0.0, built Fri Mar 21 10:28:35 2008
        [path: C:\Program Files\Debugging Tools for Windows (x86)\WINXP\exts.dll]
    uext: image 6.9.0003.113, API 1.0.0, built Fri Mar 21 10:28:33 2008
        [path: C:\Program Files\Debugging Tools for Windows (x86)\winext\uext.dll]
    ntsdexts: image 6.1.6526.1, API 1.0.0, built Fri Mar 21 10:26:36 2008
        [path: C:\Program Files\Debugging Tools for Windows (x86)\WINXP\ntsdexts.dll]


  *** vertarget *** 
Windows Server 2003 Version 3790 (Service Pack 2) UP Free x64
Product: Server, suite: Enterprise TerminalServer
kernel32.dll version: 5.2.3790.4062 (srv03_sp2_gdr.070417-0203)
Debug session time: Sat Sep  6 00:15:47.000 2008 (GMT+9)
System Uptime: 1 days 3:53:15.489
Process Uptime: 0 days 0:00:11.000
  Kernel time: 0 days 0:00:00.000
  User time: 0 days 0:00:00.000

 筆者が受託開発したWinDbgスクリプトコード(WinDbgアプリケーション)を開発委託主が実行し、その組織から何らかの相談を受けた場合、画面に表示されているマシン情報やインストールされているWinDbgバージョン情報、そして、実行モードをまず通知してもらいます。コンサルティングビジネスの話はそれからとなります。

 WinDbgは複数のクラッシュダンプファイルを読み込み、クラッシュ原因を特定する作業を支援してくれます。この種の作業では、WinDbgコマンドスクリプティング(WinDbgアプリケーション開発)技術が実質的に必須になります。この技術を習得しておけば、高度なデバッグ作業、システム分析、クラッシュ原因の分析作業や分析結果のレポート作成をほとんど自動化できます。

前へ | Windowsセキュリティセミナー | 次へ



 WinDbg入門  ホーム


Copyright©豊田孝 2004- 2009
本日は2009-01-06です。