All Articles

Magical WinDbg VOL.1【2 章 WinDbg の基本操作】

本章では、解析に使用する WinDbg の基本的な UI 操作について紹介します。

なお、WinDbg でデバッグやダンプファイルの解析を行うための基本的な操作方法については公式のドキュメントの記載が十分に充実しています。


WinDbg とは:

https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/windbg-overview


そのため、WinDbg の操作についてより詳しく知りたい方は上記の公式ドキュメントを参照してください。

もくじ

WinDbg の UI について

こちらは WinDbg(Classic) を管理者権限で起動した直後のGUIです。

WinDbg 起動後の GUI

それぞれのボタンは次の機能を持ちます。

番号 機能 ショートカット
1 Open Source File Ctrl+O
2 Insert or remove breakpoint F9
3 Command Alt+1
4 Watch Alt+2
5 Locals Alt+3
6 Registers Alt+4
7 Memory Window Alt+5
8 Call Stack Alt+6
9 Disassembly Alt+7
10 Scratch Pad Alt+8
11 Processes and Threads Alt+9
12 Command Browser Ctrl+N
13 Source mode ON N/A
14 Source mode OFF N/A
15 Font N/A
16 Options N/A

なお、Windows アプリ版の WinDbg を使用している場合には、上記の WinDbg(Classic) の画面とはアイコンや UI が異なりますが、各ウインドウの名称や機能、既定のショートカットキーなどは一部を除いて共通ですのでご安心ください。

Open Source File ([Ctrl+O]キー)

ツールバーの一番左端にある 1 番のボタンは、Open Source File ボタンです。

このボタンをクリックすると、エクスプローラーウィンドウが開き、ソースファイルを WinDbg で開くことができます。(Open Source File ボタンからファイルの実行やプロセスへのアタッチを行うことはできません)

ショートカットキーは[Ctrl+O]キーです。

ソースファイルを開くと、WinDbg 上でソースファイルの中のソースコードを参照できます。(これは読み取り専用であり、書き込みを行うことはできません)

ソースファイルの参照は本書では使用しない機能ですが、自身が開発したプログラムのデバッグを行う場合に非常に役に立つ機能です。

Insert or remove breakpoint ([F9] キー)

2 番のボタンは、Insert or remove breakpoint です。

アクティブなウィンドウが Source ウィンドウか、Disassembly ウィンドウのときのみ利用可能です。

このボタンを任意の箇所を選択した状態で押すことで、ブレークポイントの設定を切り替えることができます。

ショートカットキーは、[F9] キーです。

ダンプファイルの解析ではブレークポイントの設定は行わないため、本書ではこの機能は使用しません。

Command ([Alt+1] キー)

Command ウィンドウが閉じている状態で 3 番のボタンをクリックすることで、新たに Command ウィンドウを開くことができます。

ショートカットキーは [Alt+1] キーです。

Command ウィンドウは、ダンプファイルの解析を行う際に最もよく使用する機能の一つですので、ショートカットも含めて覚えておくと便利です。

Command ウィンドウの起動

Watch ([Alt+2] キー)

4番のボタンをクリックすることで、Watch ウィンドウを開くことができます。

ショートカットキーは [Alt+2] キーです。

Watch ウィンドウは本書で使用することはありませんが、デバッグを行う際などに役に立つ場合があります。

詳しい使い方については下記の公式ドキュメントの記載を参照してください。


ウォッチ ウィンドウの使用:

https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/watch-window


Locals ([Alt+3] キー)

5 番のボタンをクリックすることで、Locals ウィンドウを開くことができます。

ショートカットキーは [Alt+3] キーです。

こちらも本書では使用しないので紹介は割愛します。

Registers ([Alt+4] キー)

6 番のボタンをクリックすることで、Registers ウィンドウを開くことができます。

ショートカットキーは [Alt+4] キーです。

Registers ウィンドウを用いたレジスタの表示と編集方法については、以下のドキュメントを参照してください。

Registers ウィンドウはダンプファイル解析の場合はデバッグを行う時ほど使用することはありません。

しかし、レジスタの情報を簡単に一覧できるので、非常に便利な機能です。


WinDbg でのレジスタの表示と編集:

https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/registers-window


ダンプファイルを解析する場合に Registers ウインドウを起動すると、以下のように各レジスタの値を参照・編集できます。

Registers ウィンドウの起動

Memory([Alt+5] キー)

7 番のボタンをクリックすることで、Memory ウィンドウを開くことができます。

ショートカットキーは [Alt+5] キーです。

Memory ウィンドウの詳細については以下のドキュメントを参照してください。


WinDbg でのメモリの表示と編集:

https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/memory-window


Call Stack ([Alt+6] キー)

8 番のボタンをクリックすることで、Call Stack ウィンドウを開くことができます。

ショートカットキーは[Alt+6]キーです。

Call Stack ウィンドウにはスタック内の呼び出し履歴情報が表示されます。

これは、Command ウィンドウで k コマンドを実行して呼び出したスタックトレースの情報と同一になります。

Call Stack ウィンドウに表示される情報

Disassembly ([Alt+7] キー)

9番のボタンをクリックすることで、Disassembly ウィンドウを開くことができます。

ショートカットキーは [Alt+7] キーです。

Disassembly ウィンドウでは、デバッグ対象のアセンブリコードを表示できます。

Disassembly ウィンドウは、特にシンボルファイルを使用せずに解析を行う場合に非常に助けになる機能です。

Scratch Pad ([Alt+8] キー)

10 番のボタンをクリックすることで、Scratch Pad ウィンドウを開くことができます。

ショートカットキーは [Alt+8] キーです。

Scratch Pad とは、テキストを入力し、保存できるクリップボードです。

単なるメモ帳と侮りがちですが、解析にある程度慣れてくると多用することになる便利な機能です。

Processes and Threads ([Alt+9] キー)

11番のボタンをクリックすることで、Processes and Threads ウィンドウを開くことができます。

ショートカットキーは [Alt+9] キーです。

このウィンドウでは、デバッグ中のすべてのプロセスの一覧を参照できます。

本書では使用しないので割愛しますが、詳細については以下の公式ドキュメントの記載が充実しています。


WinDbg でのプロセスとスレッドの制御:

https://docs.microsoft.com/ja-jp/windows-hardware/drivers/debugger/processes-and-threads-window


その他の項目

その他のウインドウについては本書では割愛します。

上記の内容を含め、各ウインドウの概要については以下の公開ブログに記載しています。

本書で割愛したウインドウについても以下で紹介していますので、よければご参照ください。


WinDbgの各ウィンドウについてまとめてみた(かえるのひみつきち):

https://kashiwaba-yuki.com/windows-windbg-003-ui


ワークスペースの設定を変更する

WinDbg(Classic) は、初期設定では以下のように何のウインドウも表示されない状態で起動します。

WinDbg(Classic) の起動画面

ダンプ解析の度に必要なウインドウを起動するのは少々手間なので、WinDbg のワークスペースの設定を行います。

まず、解析に使用するウインドウをいくつか起動した状態で、各ウインドウを WinDbg のメインのウインドウにマウスでドラッグします。

上手くウインドウの縁や中央などにドラッグすると、各ウインドウを垂直、または水平にスプリットして配置できることがわかります。

また、2 つ以上のウインドウを重ねて配置することで、1 箇所にタブとしてまとめることも可能です。

例えば、以下の画面では右側に Command ウインドウを配置し、左側の上半分に、Disassembly ウインドウと Memory ウインドウを重ねて配置、そして、左側の下半分には Scratch Pad を配置しています。

WinDbg(Classic) で各ウインドウを配置する

これで解析用のウインドウの配置が完了しましたが、このままでは WinDbg を再起動するとウインドウもすべてリセットされてしまいます。

そのため、再起動後も設定を維持するために、既定のワークスペースに現在の設定を保存します。

WinDbg のウインドウにて、右上の [File] から [Save Workspace] をクリックすることで、既定のワークスペースに現在の設定を保存できます。

ワークスペースを保存する

保存された設定情報は、HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windbg\Workspaces\Default のレジストリに書き込まれるため、WinDbg を再起動したあとも変更した設定が維持されるようになります。

ちなみに、本書では扱いませんが、変更した設定を新しいワークスペースとして保存することも可能です。

また、エクスポートした WEW ファイルをインポートさせたり、WinDbg の設定情報を格納するレジストリ値を直接コピーすることで、他の端末に WinDbg の設定を移植することもできます。

WinDbg のコマンド操作

まえがきに記載の通り、本書は網羅的な Windows ダンプ解析の入門書となることを意図しておらず、WinDbg のコマンド操作についても詳しい解説は行いません。

WinDbg のコマンドについては、以下の公式ドキュメントや WinDbg に付属のヘルプの記載が非常に充実しています。

そのため、ダンプファイルの解析を行う場合には、以下に示すドキュメントやヘルプの情報を常に参照できる状態としておくことを推奨します。


WinDbg コマンド:

https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/commands


WinDbg のヘルプは、上部のメニューバーから [Help]>[Windows] をクリックするか、[F1] キーを使用することで起動できます。

WinDbg のヘルプウインドウ

WinDbg のヘルプの内容は基本的に公式ドキュメントのコマンドリファレンスの内容と同一です。

WinDbg のヘルプは英語表記のみですが、個人的には公式ドキュメントよりも検索性が高いと感じるため、クイックにリファレンスを参照したい場合などに多用します。

また、非公式の情報ではありますが、インターネット上で個人が公開しているチートシートなども、WinDbg コマンドを活用するために有用です。

一例として以下に私が個人的に作成し、利用しているチートシートの URL を記載します。


WinDbg でダンプ解析、ライブデバッグを行う時のチートシート:

https://kashiwaba-yuki.com/windbg-basics-001


2 章のまとめ

この章では、Windows のダンプファイル解析に使用するツールである WinDbg の基本的な機能や UI 操作について紹介しました。

特に、Disassembly、Registers、Memory ウィンドウなどはデバッガコマンドを使用する操作に不慣れなうちは、解析時のストレスを軽減するために非常に役に立つ機能です。

ある程度デバッガコマンドに慣れてくると Command ウインドウや Scratch Pad 以外のウィンドウを使用する頻度は少なくなると思いますが、WinDbg の便利な機能をぜひ試してみてください。

各章へのリンク