ITプロ(非開発者)向けWindowsカーネルデバッグ事始め:山市良のうぃんどうず日記(125)(1/2 ページ)
「Debugging Tools for Windows」(WinDbg、kdなど)といえば、アプリケーションやドライバ開発者が自分で書いたプログラムをデバッグするための、Windows向け開発者専用ツールというイメージがあります。しかし、開発者ではないITプロにとっても、Windowsの動作や仕様の理解、あるいはトラブル解決に役立つことがあります。
開発者だけのものじゃない、ITプロもデバッガーを使ってみよう
筆者が翻訳した『インサイドWindows 第7版 上』(日経BP社刊、Pavel Yosifovich、Alex Ionescu、Mark E. Russinovich、David A. Solomon著)が発売されました。本書は、『Inside Windows NT』(Microsoft Press、1992年、Helen Custer著)から25年以上続いているシリーズの最新版『Windows Internals, Seventh Edition, Part 1』(Microsoft Press、2017年5月)の日本語訳です。筆者は7版で初めてこのシリーズの翻訳を担当させていただきました。はなはだ私事で恐縮ですが、筆者の“日記”なので許してください。
本書は、公開されている、あるいは非公開のWindowsの内部構造や動作仕様について、ここまでもかと深く掘り下げて解説する、800ページを超える長い長い物語です。ただ読み進めるだけでは、全く頭に入ってこないこと確実です。
そこで、本書全体を通して計145の「実習」が用意されており、Windowsの標準ツール(タスクマネージャーなど)、「Windows Software Development Kit(SDK)」や「Windows Driver Kit(WDK)」に含まれる「Debugging Tools for Windows」のデバッガーおよび関連ツール、「Windows Sysinternals」の各ツール、書籍付録のツールを使用して、読者自身でWindowsのさまざまな挙動を体験したり、プロセスやスレッド、それらに関係する構造体を確かめたりすることができます。仮想メモリのアドレスを物理メモリに変換してみるような、面白い実習もあります。
デバッガーの使用は、アプリケーションやドライバの開発者なら慣れたものでしょうが、開発者ではないITプロフェッショナル(インフラ系技術者やシステム管理部門も担当者)にとってはなじみが薄く、「難しそう」「導入が面倒」といったイメージを持っていると思います。Windows SDKやWDKはバージョンごとに用意されているので、確かに導入は面倒です。デバッグ環境の導入方法については、書籍の中でも少ししか触れられていないので、今回は非開発者のITプロフェッショナル向けにどのようなオプションがあるのかを紹介します。
ユーザーモードとカーネルモードのローカルデバッグ
Debugging Tools for Windowsのデバッガー(Windbg.exe、kd.exe、cdb.exe、ntsd.exe)を使用すると、ユーザーモードアプリケーションやカーネルのプロセス/スレッド、あるいはメモリダンプファイル(%Systemroot%\memory.dmpなど)にアタッチし、デバッグコマンドやエクステンションでさまざまな調査を行えます。
「cdb.exe」と「ntsd.exe」はCUIベースのユーザーモードデバッガー、「kd.exe」はCUIベースのカーネルモードデバッガー、そして「WinDbg.exe」はユーザーモードおよびカーネルモードの両方に対応したGUIベースのデバッガーです。Debugging Tools for Windowsの入手方法やインストール後の初期設定(シンボルサーバの設定)などについては、書籍をご覧ください。
ローカルコンピュータでカーネルモードのデバッグを実行するには、Windowsを「デバッグモード」で起動する必要があります。それには、コマンドプロンプトを管理者として開き、次のコマンドラインを実行してコンピュータを再起動します。
bcdedit /debug on
shutdown /r /t 0
WinDbg.exeを使用する場合は、スタートメニューからコンピュータアーキテクチャに一致する「WinDbg(X86)」または「WinDbg(X64)」を管理者として起動し、「File」メニューから「Kernel Debug」を選択し、「Kernel Debugging」ダイアログボックスの「Local」タブを選択して「OK」ボタンをクリックします。
前述のように、Debugging Tools for Windowsを含むWindows SDKやWDKは、Windowsのバージョンごとに用意されているので、目的に合わせてデバッグ環境を準備しなければならず、そこが面倒なところです。
しかし、仮想化が一般になった今では、仮想マシン上にデバッグ環境を準備すると便利です。書籍の「実習」にはデバッガーとデバッギー(デバッグ対象)用に2台のコンピュータを必要とする「実習」もあります。後述するように、その場合も仮想マシン環境に準備すると便利です。
LiveKdならデバッグモードで再起動せずにローカルデバッグが可能
ローカルのカーネルデバッグを実行するには、デバッグモードに切り替えて再起動するというのも面倒です。面倒なだけでなく、トラブルシューティングが目的の場合、デバッグモードで再起動することで、問題が再現しなくなるということもあります。
その場合は、Debugging Tools for Windowsをインストールしたのと同じコンピュータに「Windows Sysinternals」の「LiveKd.exe」(単体またはSysinternals Suiteとして)をインストールしておくと便利です。インストールとはいっても、Zipファイルを解凍して単純にコピーし、システムのPATH環境変数にコピー先のパスを設定するだけのことです。
- LiveKd[英語](Windows Sysinternals)
- Sysinternals Suite[英語](Windows Sysinternals)
例えば、64bitカーネルをデバッグする場合は、コマンドプロンプトを管理者として開き、次のいずれかのコマンドラインを実行します。「-k」オプションに続けて、使用したいデバッガーのパスを指定するのです。
livekd -k "C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\kd.exe"
livekd -k "C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\windbg.exe"
LiveKdを使用してカーネルデバッガーを実行する場合、デバッグ対象はデバッグモードで起動している必要はありません。デバッグを実行している側からは、ローカルデバッグしているように見えますが、実は、LiveKdはカーネルメモリのスナップショットをメモリダンプとして作成し、そのダンプファイルにデバッガーをアタッチしているのです。
デバッグ対象のコンピュータで進行中の挙動は、アタッチしているスナップショットには反映されないことに注意が必要です。その場合、デバッガーを終了すると再実行するかどうかを問われるので、[y]を入力してスナップショットをリフレッシュします(画面1)。
LiveKdにはHyper-V仮想マシンに対し、文字通り「ライブでアタッチする」(スナップショットではなく)機能もあります。LiveKdについてさらに詳しく知りたい方は、『Windows Sysinternals徹底解説 改定新版』(日経BP社刊、2017年、Mark Russinovich、Aaron Margosis 著)をお勧めします。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- 特集「Windows Server 2008/2008 R2 サポート終了対策ポータル」
- 年の初めに再確認、2018年にサポートが終了するMicrosoft製品は?
Microsoftは同社の製品およびサービスについて、明確なサポートポリシー(ただし、途中で変更あり)に基づき、更新プログラムを含むサポートを提供しています。2018年は主に10年前にリリースされた製品がサポート終了を迎えます。どのような製品があるのか、年の初めに再確認し、使用していないかどうかを調べておきましょう。 - 再考、Windows OSのライフサイクル――安心して2020年を迎えるために
Windowsのサポートライフサイクル期限が近づくたびに、サポート終了の影響やアップグレードの必要性が話題になります。特に2014年4月にWindows XPのサポートが終了してからがそうです。その理由は、Windows PCやインターネットの普及、Microsoftのサポートポリシーの明確化(や変更)、新たなセキュリティ脅威の登場など、さまざまです。2017年4月にWindows Vistaのサポートが終了しました。次は、Windows 7の番です。 - Windows Server 2012 R2で行こう!
Windows Server 2003のサポート終了日「2015年7月」がいよいよ迫ってきた。現在Windows Server 2003を利用している企業は、新しいOSへの移行を本格的に検討する必要があるだろう。本稿では、Windows Server 2003から最新のWindows Server 2012 R2へ移行する理由やメリットについて取り上げる。 - サポート切れのサーバーOSを使い続けるリスクは経営課題と考えるべき
OSのサポートが終了すると、セキュリティ面で大きな問題を抱えることになる。では、サポート終了後もWindows Server 2003を使い続けることによって、企業はどのようなリスクを負うことになるのだろうか。IPAの渡辺貴仁氏に話を聞いた。