メモリダンプを分析するためのWinDBGのインストールと構成。 Windowsデバッグツール:BSODの診断と修正Windowsでメモリダンプを有効にする方法
ブルースクリーン(BSOD)の原因を特定するには、メモリダンプ分析が必要です。 圧倒的多数の場合、ミニダンプで十分です。ミニダンプは、重大なエラーが発生した場合にシステムによって生成されます。
この記事では、BSODの根本原因を特定するのに役立つ強力なデバッグツールであるWinDBGをインストールおよび構成するための手順を説明します。
ステップ1-スモールメモリダンプレコーディングの設定
ステップ2-WinDBGをインストールする
メモリダンプを分析するには、WindowsSDKに含まれているWinDBGデバッガーをインストールする必要があります。 この記事の執筆時点で、WindowsSDKの利用可能な最新バージョンは次のとおりです。
- Windows 10 SDK(ネットワークインストーラーをダウンロード)
- Windows 8.1 SDK(ネットワークインストーラーのダウンロード)
![](https://i0.wp.com/oszone.net/user_img/150714131653/sdk_setup1_mini_oszone.png)
ステップ3-.dmpファイルをWinDBGにマッピングする
メモリダンプの読み取りと分析を容易にするために、.dmpファイルをWinDBGにマップします。 これにより、事前起動をバイパスして、エクスプローラーから直接WinDBGでダンプファイルを開くことができます。
![](https://i1.wp.com/oszone.net/user_img/150710122444/esd_cmd_mini_oszone.png)
ステップ4-デバッグシンボルファイルを受信するようにSymbolサーバーを構成する
![](https://i0.wp.com/oszone.net/user_img/150714131653/symbolpath.png)
これで、WinDBGのインストールと初期構成が完了しました。 外観を変更するには、メニューに移動します 意見-アイテムを選択すると、フォント設定が表示されます フォント、およびコンソールウィンドウの設定 オプション.
ブルースクリーン(BSOD)の原因を特定するには、メモリダンプ分析が必要です。 圧倒的多数の場合、ミニダンプで十分です。ミニダンプは、重大なエラーが発生した場合にシステムによって生成されます。
この記事では、BSODの根本原因を特定するのに役立つ強力なデバッグツールであるWinDBGをインストールおよび構成するための手順を説明します。
ステップ1-スモールメモリダンプレコーディングの設定
ステップ2-WinDBGをインストールする
メモリダンプを分析するには、WindowsSDKに含まれているWinDBGデバッガーをインストールする必要があります。 この記事の執筆時点で、WindowsSDKの利用可能な最新バージョンは次のとおりです。
- Windows 10 SDK(ネットワークインストーラーをダウンロード)
- Windows 8.1 SDK(ネットワークインストーラーのダウンロード)
![](https://i0.wp.com/oszone.net/user_img/150714131653/sdk_setup1_mini_oszone.png)
ステップ3-.dmpファイルをWinDBGにマッピングする
メモリダンプの読み取りと分析を容易にするために、.dmpファイルをWinDBGにマップします。 これにより、事前起動をバイパスして、エクスプローラーから直接WinDBGでダンプファイルを開くことができます。
![](https://i1.wp.com/oszone.net/user_img/150710122444/esd_cmd_mini_oszone.png)
ステップ4-デバッグシンボルファイルを受信するようにSymbolサーバーを構成する
![](https://i0.wp.com/oszone.net/user_img/150714131653/symbolpath.png)
これで、WinDBGのインストールと初期構成が完了しました。 外観を変更するには、メニューに移動します 意見-アイテムを選択すると、フォント設定が表示されます フォント、およびコンソールウィンドウの設定 オプション.
WinDBGの紹介-パート1
アレクサンダーアンティポフ
WinDBGは優れたデバッガーです。 あまりユーザーフレンドリーなインターフェイスがなく、デフォルトで背景が黒くない場合がありますが、現時点でWindowsで最も強力で安定したデバッガーの1つです。 この記事では、WinDBGの基本を紹介し、WinDBGを使い始めることができるようにします。
WinDBGは優れたデバッガーです。 あまりユーザーフレンドリーなインターフェイスがなく、デフォルトで背景が黒くない場合がありますが、現時点でWindowsで最も強力で安定したデバッガーの1つです。 この記事では、WinDBGの基本を紹介し、WinDBGを使い始めることができるようにします。
これは、WinDBGに関するシリーズの最初の記事です。 このサイクルに含まれるすべての記事のリスト:
- パート1-インストール、インターフェイス、シンボル、リモート/ローカルデバッグ、ヘルプシステム、モジュール、レジスタ。
- パート2-ブレークポイント。
- パート3-メモリ検査、ステップバイステップのプログラムデバッグ、ヒントとコツ。
この記事では、インストールとプロセスへの接続について説明し、次の記事では、ブレークポイント、段階的なデバッグ、およびメモリ検査について説明します。
WinDBGのインストール
Windows 7と比較して、Windows8でのWinDBGのインストールプロセスはマイナーな変更が加えられています。 このセクションでは、両方のオペレーティングシステムにデバッガーをインストールする方法について説明します。
Windows8へのWinDBGのインストール
Windows 8では、WinDBGはWindows Driver Kit(WDK)に含まれています。 Visual StudioとWDKをインストールするか、WinDBGを含むWindows8.1用のデバッグツールパッケージを個別にインストールできます。
インストーラーは、WinDBGをローカルにインストールするか、別のコンピューター用に開発者パッケージ全体をダウンロードするかを尋ねます。 後者は基本的にオフラインインストーラーと同等であり、将来他のシステムにパッケージをインストールする場合に最適です。
図1:インストールタイプの選択
次のウィンドウで、「Windows用デバッグツール」以外のすべての項目のチェックを外し、「ダウンロード」ボタンをクリックする必要があります。
インストーラーが作業を終了したら、パッケージがダウンロードされたディレクトリ(デフォルトではc:\ Users \ Username \ Downloads \ Windows Kits \ 8.1 \ StandaloneSDK)に移動し、インストール手順を実行します。
Windows7以前へのWinDBGのインストール
Windows 7以前の場合、WinDBGは、WindowsSDKおよび.NetFrameworkに含まれているDebuggingTools forWindowsパッケージに含まれています。 インストーラーをダウンロードし、インストールプロセス中に「Windows用のデバッグツール」を選択する必要があります。
インストール中に、[再配布可能パッケージ]セクションの[デバッグツール]オプションを選択して、後続のインストールを容易にするスタンドアロンインストーラーを作成します。
図2:スタンドアロンインストーラーを作成するためのインストールオプションの選択
インストールが完了すると、さまざまなプラットフォーム用のWinDBGインストーラーが作成されます(ディレクトリc:\ Program Files \ Microsoft SDKs \ Windows \ v7.1 \ Redist \ Debugging Tools for Windows \)。
図3:さまざまなプラットフォーム用のWinDBGインストーラーを含むフォルダー
WinDBGインターフェース
図4:WinDBGの外観
WinDGBのルックアンドフィールを最初に見ると、デバッガーが驚くほど単純であることがわかります。 WinDBGの機能のほとんどは、プロセスのデバッグ中に学習されます。 次のセクションでは、インターフェイスの説明に時間を浪費する代わりに、最も重要なポイントのみを取り上げます。
デバッガーインターフェイスについて知っておく必要がある最も基本的なことは、2つの領域があるコマンドウィンドウです。 最初の領域:コマンド実行の結果が表示されるウィンドウ。 2番目の領域:コマンドを入力するための小さなテキストフィールド。
図5:WinDBGコマンドウィンドウ
記号
ほとんどの場合、WinDBGは特別な設定を必要とせず、箱から出して正しく動作します。 ただし、構成する必要がある重要なことの1つは、シンボルです。 シンボルは、プログラムのコンパイル中に実行可能ファイルで生成され、デバッグ情報(関数および変数名)を含むファイルです。 デバッグ情報を使用すると、デバッグまたは逆アセンブル中にアプリケーションの機能を調べることができます。 多くのMicrosoftコンポーネントは、Microsoft SymbolServerを介して配布されるシンボルを使用してコンパイルされています。 残りの実行可能ファイルでは、すべてがそれほどバラ色ではありません。デバッグ情報を含むファイルがアプリケーションに付属することはめったにありません。 ほとんどの場合、企業はそのような情報へのアクセスを制限しています。
Microsoft Symbol Serverを使用するようにWinDBGを構成するには、[ファイル]:[シンボルファイルパス]に移動し、SRV * C:\ Symbols * http://msdl.microsoft.com/download/symbolsを設定します。 もちろん、アスタリスクが区切り文字として使用されているのは少し奇妙です。 Microsoft Symbol Serverをセットアップすると、シンボルがC:\ Symbolsフォルダーにダウンロードされます。
図6:Microsoft SymbolServerの構成
WinDBGは、必要に応じてバイナリのシンボルを自動的にロードします。 次のように、独自のシンボルフォルダを追加することもできます。
SRV * C:\シンボル* http://msdl.microsoft.com/download/symbols; c:\ SomeOtherSymbolFolder
デバッグ中のシンボルの追加
デバッグ中にシンボルをインポートする必要がある場合は、.sympathを使用してインポートできます(プロセスにフックするとコマンドウィンドウが表示されます)。 たとえば、c:\ SomeOtherSymbolFolderフォルダーを追加するには、次のコマンドを入力します。
0:025> .sympath + c:\ SomeOtherSymbolFolder
シンボル検索パスは次のとおりです。SRV* C:\シンボル* http://msdl.microsoft.com/download/symbols; c:\ SomeOtherSymbolFolder
拡張シンボル検索パスは次のとおりです。srv* c:\シンボル* http://msdl.microsoft.com/download/symbols; c:\ someothersymbolfolder
パスを追加または変更した後にシンボルをリロードする必要はありません。
0:025> .reload
現在のモジュールをリロードする
................................................................
...............................................
ロードされたシンボルをチェックする
シンボルがロードされているモジュールを確認するには、x *!コマンドを使用できます。 WinDBGは必要な場合にのみシンボルをロードしますが、x *! ロードできるシンボルが表示されます。 ld *コマンドを使用して、シンボルのロードを強制できます(これには時間がかかる場合があり、Debug:Breakに移動してこのプロセスを停止できます)。
これで、各モジュールのシンボルを確認できます。
図8:記号のリスト
ローカルプロセスのデバッグ
ローカルプロセスをデバッグする場合、次の2つのパスがあります。
- すでに実行中のプロセスに接続します。
- WinDBGを介してプロセスを起動します。
それぞれの方法には、独自の長所と短所があります。 たとえば、WinDBGを介してプログラムを実行する場合、アプリケーションをクラッシュさせる可能性のある特別なデバッグオプション(ヒープデバッグなど)がいくつかあります。 一方、デバッガーをフックするとクラッシュするプログラムもあります。 一部のアプリケーション(特にマルウェア)は、起動時にシステム内のデバッガーの存在をチェックするため、この場合、すでに実行中のプロセスに固執するのが理にかなっています。 起動時にいくつかのパラメーターを設定するWindowsOSで実行されているサービスをデバッグする場合があるため、デバッグプロセスを簡素化するには、デバッガーを介してサービスを開始するよりも、実行中のプロセスにフックすることをお勧めします。 デバッガーを介してプロセスを実行すると、パフォーマンスに深刻な影響があると主張する人もいます。 つまり、両方を試して、自分に最適なものを選択してください。 何らかの理由で特定の方法を好む場合は、コメントであなたの考えを共有してください!
プロセス開始
ネットワークではなくローカルで実行されているスタンドアロンアプリケーションをデバッグしている場合は、WinDBGを介して実行することをお勧めします。 ただし、これは、すでに実行中のプロセスにフックできないことを意味するものではありません。 最も便利な方法を選択してください。
プロセスを開始することは難しくありません。 「ファイル:実行可能ファイルを開く」に移動し、デバッグする実行可能ファイルを選択します。 引数を指定したり、開始ディレクトリを設定したりすることもできます。
図9:デバッグ用の実行可能ファイルの選択
プロセス接続
すでに実行中のプロセスに接続することも難しくありません。 ただし、場合によっては、デバッグする正確なプロセスを見つけるのに時間がかかることがあります。 たとえば、一部のブラウザは1つの親プロセスを作成し、次にタブごとにさらにいくつかのプロセスを作成します。 したがって、デバッグしているクラッシュダンプによっては、親プロセスではなく、タブに関連付けられているプロセスにフックしたい場合があります。
すでに実行中のプロセスにアタッチするには、「ファイル:プロセスにアタッチ」に移動し、プロセスのPIDまたは名前を選択します。 プロセスを開始するには、適切な権限が必要であることを忘れないでください。
図10:フックするプロセスの選択
接続後、アプリケーションが作業を中断した場合は、対応するチェックボックスをオンにすることで「Noninvaise」モードを使用できます。
リモートプロセスのデバッグ
リモートシステムでプロセスをデバッグする必要がある場合があります。 仮想マシンやRDPを使用する代わりに、ローカルデバッガーを使用してこれを行う方がはるかに便利です。 または、LoginUI.exeプロセスをデバッグしている可能性があります。これは、システムがロックされている場合にのみ使用できます。 このような状況では、ローカルバージョンのWinDBGを使用して、リモートでプロセスに接続できます。 これらのタスクを実行するには、2つの最も一般的な方法があります。
既存のデバッグセッション
(WinDBGを介してプロセスを接続または開始することにより)プログラムのデバッグを既にローカルで開始している場合は、特定のコマンドを入力すると、WinDBGはリモートデバッガーが接続できるリスナーを起動します。 これを行うには、.serverコマンドを使用します。
サーバーtcp:ポート= 5005
上記のコマンドを実行すると、次のような警告が表示される場合があります。
図11:「リスナー」を作成するコマンドを実行した後に表示される可能性のある警告メッセージ
次に、WinDBGはサーバーが実行中であることを報告します。
0:005> .server tcp:ポート= 5005
0:
これで、「ファイル:リモートセッションに接続」に移動し、テキストフィールドに次のように入力することで、リモートホストから既存のデバッグセッションに接続できます。tcp:ポート= 5005、サーバー= 192.168.127.138
図12:デバッグセッションへのリモート接続
接続すると、リモートクライアントで確認を受け取ります。
サーバーが起動しました。 クライアントはこれらのコマンドラインのいずれかに接続できます
0:
MACHINENAME \ユーザー(tcp 192.168.127.138:13334)が月曜日12月16日09:03:032013に接続されました
デバッガーのローカルバージョンのメッセージ:
MACHINENAME \ユーザー(tcp 192.168.127.138:13334)が月曜日12月16日09:03:032013に接続されました
リモートサーバーの作成
WinDBGを使用して別のサーバーを作成し、リモートで接続して、デバッグするプロセスを選択することもできます。 これは、プロセスのデバッグを計画しているdbgsrv.exeファイルを使用して実行できます。 このようなサーバーを起動するには、次のコマンドを実行します。
dbgsrv.exe -t tcp:ポート= 5005
図13:リモートサーバーの起動
繰り返しになりますが、次のことを受け入れる必要があるというセキュリティ警告が表示される場合があります。
図14:デバッグサーバーの起動中に表示される可能性のあるセキュリティメッセージ
「ファイル:リモートスタブに接続」ファイルに移動し、テキストフィールドに次の行を入力すると、デバッグサーバーに接続できます。 tcp:ポート= 5005、サーバー= 192.168.127.138
図15:デバッグサーバーへの接続
接続後、接続されているというシグナルは受信されませんが、「ファイル:プロセスにアタッチ」に移動すると、デバッグサーバープロセス(dbgsrv.exeが実行されている場所)のリストが表示されます。 これで、ローカルで実行しているかのようにプロセスにフックできます。
ヘルプシステム
WinDBGのヘルプシステムは素晴らしいです。 新しいことを学ぶことに加えて、コマンドに関する背景情報を取得できるはずです。 .hhコマンドを使用して、WinDBGヘルプにアクセスします。
特定のコマンドのヘルプ情報を取得することもできます。 たとえば、.reloadコマンドのヘルプを表示するには、次のコマンドを使用します。
windbg> .hh .reload
または、[ヘルプ:コンテンツ]セクションに移動します。
モジュール
プログラムの実行中に、アプリケーションの機能を提供するさまざまなモジュールがインポートされます。 したがって、アプリケーションによってインポートされるモジュールがわかっている場合は、その動作をよりよく理解できます。 多くの場合、実行可能ファイル自体ではなく、プログラムによってロードされた特定のモジュールをデバッグします。
プロセスに接続した後、WinDBGはロードされたモジュールを自動的に表示します。 たとえば、以下のモジュールは、calc.exeに接続した後に表示されます。
Microsoft(R)Windowsデバッガバージョン6.12.0002.633 X86
Copyright(c)MicrosoftCorporation。 全著作権所有。
***保留中のアタッチで待機
シンボル検索パスは次のとおりです。SRV* C:\シンボル* http://msdl.microsoft.com/download/symbols
実行可能な検索パスは次のとおりです。
ModLoad:00a70000 00b30000 C:\ Windows \ system32 \ calc.exe
ModLoad:77630000 7776c000 C:\ Windows \ SYSTEM32 \ ntdll.dll
ModLoad:77550000 77624000 C:\ Windows \ system32 \ kernel32.dll
ModLoad:75920000 7596a000 C:\ Windows \ system32 \ KERNELBASE.dll
ModLoad:76410000 77059000 C:\ Windows \ system32 \ SHELL32.dll
ModLoad:77240000 772ec000 C:\ Windows \ system32 \ msvcrt.dll
ModLoad:76300000 76357000 C:\ Windows \ system32 \ SHLWAPI.dll
ModLoad:75cd0000 75d1e000 C:\ Windows \ system32 \ GDI32.dll
ModLoad:75fa0000 76069000 C:\ Windows \ system32 \ USER32.dll
ModLoad:777b0000 777ba000 C:\ Windows \ system32 \ LPK.dll
ModLoad:774b0000 7754d000 C:\ Windows \ system32 \ USP10.dll
ModLoad:73110000 732a0000 C:\ Windows \ WinSxS \ x86_microsoft.windows.gdiplus_
6595b64144ccf1df_1.1.7600.16385_none_72fc7cbf861225ca \ gdiplus.dll
ModLoad:75a80000 75bdc000 C:\ Windows \ system32 \ ole32.dll
ModLoad:76360000 76401000 C:\ Windows \ system32 \ RPCRT4.dll
ModLoad:777c0000 77860000 C:\ Windows \ system32 \ ADVAPI32.dll
ModLoad:75be0000 75bf9000 C:\ Windows \ SYSTEM32 \ sechost.dll
ModLoad:76270000 762ff000 C:\ Windows \ system32 \ OLEAUT32.dll
ModLoad:74590000 745d0000 C:\ Windows \ system32 \ UxTheme.dll
ModLoad:74710000 748ae000 C:\ Windows \ WinSxS \ x86_microsoft.windows.common-
ModLoad:703d0000 70402000 C:\ Windows \ system32 \ WINMM.dll
ModLoad:74c80000 74c89000 C:\ Windows \ system32 \ VERSION.dll
ModLoad:77770000 7778f000 C:\ Windows \ system32 \ IMM32.DLL
ModLoad:75c00000 75ccc000 C:\ Windows \ system32 \ MSCTF.dll
ModLoad:74130000 7422b000 C:\ Windows \ system32 \ WindowsCodecs.dll
ModLoad:74260000 74273000 C:\ Windows \ system32 \ dwmapi.dll
ModLoad:756d0000 756dc000 C:\ Windows \ system32 \ CRYPTBASE.dll
ModLoad:75e60000 75ee3000 C:\ Windows \ system32 \ CLBCatQ.DLL
ModLoad:6ef10000 6ef4c000 C:\ Windows \ system32 \ oleacc.dll
デバッグプロセスの後半で、lmfコマンドを使用してこのリストを再度表示できます。
0:005> lmf
開始終了モジュール名
00a70000 00b30000 calc C:\ Windows \ system32 \ calc.exe
6ef10000 6ef4c000 oleacc C:\ Windows \ system32 \ oleacc.dll
703d0000 70402000 WINMM C:\ Windows \ system32 \ WINMM.dll
73110000 732a0000 gdiplus C:\ Windows \ WinSxS \ x86_microsoft.windows.gdiplus_6595b64144ccf1df_
1.1.7600.16385_none_72fc7cbf861225ca \ gdiplus.dll
74130000 7422b000 WindowsCodecs C:\ Windows \ system32 \ WindowsCodecs.dll
74260000 74273000 dwmapi C:\ Windows \ system32 \ dwmapi.dll
74590000 745d0000 UxTheme C:\ Windows \ system32 \ UxTheme.dll
74710000 748ae000 COMCTL32 C:\ Windows \ WinSxS \ x86_microsoft.windows.common-
Controls_6595b64144ccf1df_6.0.7600.16385_none_421189da2b7fabfc \ COMCTL32.dll
74c80000 74c89000バージョンC:\ Windows \ system32 \ VERSION.dll
756d0000 756dc000 CRYPTBASE C:\ Windows \ system32 \ CRYPTBASE.dll
75920000 7596a000 KERNELBASE C:\ Windows \ system32 \ KERNELBASE.dll
75a80000 75bdc000 ole32 C:\ Windows \ system32 \ ole32.dll
75be0000 75bf9000 sechost C:\ Windows \ SYSTEM32 \ sechost.dll
75c00000 75ccc000 MSCTF C:\ Windows \ system32 \ MSCTF.dll
75cd0000 75d1e000 GDI32 C:\ Windows \ system32 \ GDI32.dll
75e60000 75ee3000 CLBCatQ C:\ Windows \ system32 \ CLBCatQ.DLL
75fa0000 76069000 USER32 C:\ Windows \ system32 \ USER32.dll
76270000 762ff000 OLEAUT32 C:\ Windows \ system32 \ OLEAUT32.dll
76300000 76357000 SHLWAPI C:\ Windows \ system32 \ SHLWAPI.dll
76360000 76401000 RPCRT4 C:\ Windows \ system32 \ RPCRT4.dll
76410000 77059000 SHELL32 C:\ Windows \ system32 \ SHELL32.dll
77240000 772ec000 msvcrt C:\ Windows \ system32 \ msvcrt.dll
774b0000 7754d000 USP10 C:\ Windows \ system32 \ USP10.dll
77550000 77624000 kernel32 C:\ Windows \ system32 \ kernel32.dll
77630000 7776c000 ntdll C:\ Windows \ SYSTEM32 \ ntdll.dll
77770000 7778f000 IMM32 C:\ Windows \ system32 \ IMM32.DLL
777b0000 777ba000 LPK C:\ Windows \ system32 \ LPK.dll
777c0000 77860000 ADVAPI32 C:\ Windows \ system32 \ ADVAPI32.dll
「lmfm」コマンドを使用して、特定のモジュールのロードアドレスを確認することもできます。
0:005> lmf m kernel32
開始終了モジュール名
77550000 77624000 kernel32 C:\ Windows \ system32 \ kernel32.dll
!Dh拡張子を使用して、特定のモジュールの画像ヘッダーに関する情報を取得することもできます(感嘆符は拡張子を示します)。
0:005>!Dh kernel32
ファイルタイプ:DLL
ファイルヘッダーの値
14Cマシン(i386)
セクションの4つの数
4A5BDAAD日付スタンプ月7月13日21:09:012009
シンボルテーブルへの0ファイルポインタ
シンボル数0
オプションヘッダーのE0サイズ
2102の特徴
実行可能
32ビットワードマシン
DLL
オプションのヘッダー値
10Bマジック#
9.00リンカーバージョン
コードのC4600サイズ
初期化されたデータのC800サイズ
初期化されていないデータのサイズが0
エントリポイントの510C5アドレス
1000ベースのコード
- - - 新着 - - -
77550000イメージベース
1000セクションの配置
200ファイルの配置
3サブシステム(Windows CUI)
6.01オペレーティングシステムバージョン
6.01画像バージョン
6.01サブシステムバージョン
画像のD4000サイズ
800サイズのヘッダー
D5597チェックサム
スタックリザーブの00040000サイズ
スタックコミットの00001000サイズ
ヒープリザーブの00100000サイズ
ヒープコミットの00001000サイズ
140DLLの特性
ダイナミックベース
NX互換
B4DA8 [A915]エクスポートディレクトリのアドレス
インポートディレクトリのBF6C0 [1F4]アドレス
リソースディレクトリのC7000 [520]アドレス
0 [0]例外ディレクトリのアドレス
0 [0]セキュリティディレクトリのアドレス
ベースリロケーションディレクトリのC8000 [B098]アドレス
C5460 [38]デバッグディレクトリのアドレス
0 [0]説明ディレクトリのアドレス
0 [0]特別ディレクトリのアドレス
0 [0]スレッドストレージディレクトリのアドレス
ロード構成ディレクトリの816B8 [40]アドレス
278 [408]バインドされたインポートディレクトリのアドレス
インポートアドレステーブルディレクトリの1000 [DE8]アドレス
0 [0]遅延インポートディレクトリのアドレス
0 [0] COR20ヘッダーディレクトリのアドレス
0 [0]予約済みディレクトリのアドレス
セクションヘッダー#1
.text名
C44C1仮想サイズ
1000仮想アドレス
生データのC4600サイズ
生データへの800ファイルポインタ
0移転数
0行番号
60000020フラグ
コード
(位置合わせは指定されていません)
読み取りの実行
デバッグディレクトリ(2)
タイプサイズアドレスポインタ
cv 25 c549c c4c9c形式:RSDS、guid、2、kernel32.pdb
(10)4 c5498 c4c98
セクションヘッダー#2
.data名
FEC仮想サイズ
C6000仮想アドレス
生データのE00サイズ
生データへのC4E00ファイルポインタ
0再配置テーブルへのファイルポインタ
行番号への0ファイルポインタ
0移転数
0行番号
C0000040フラグ
初期化されたデータ
(位置合わせは指定されていません)
読み書き
セクションヘッダー#3
.rsrc名
520仮想サイズ
C7000仮想アドレス
600サイズの生データ
生データへのC5C00ファイルポインタ
0再配置テーブルへのファイルポインタ
行番号への0ファイルポインタ
0移転数
0行番号
40000040フラグ
初期化されたデータ
(位置合わせは指定されていません)
読み取り専用
セクションヘッダー#4
.reloc名
B098仮想サイズ
C8000仮想アドレス
生データのB200サイズ
生データへのC6200ファイルポインタ
0再配置テーブルへのファイルポインタ
行番号への0ファイルポインタ
0移転数
0行番号
42000040フラグ
初期化されたデータ
破棄可能
(位置合わせは指定されていません)
読み取り専用
メッセージと例外
プロセスに接続した後、最初にモジュールのリストが表示され、次に他のメッセージが表示される場合があります。 たとえば、calc.exeにしがみつくと、WinDBGは自動的にブレークポイントを設定します(これは、アプリケーションを停止するために使用される単なるマーカーです)。 ブレークポイント情報が表示されます。
(da8.b44):ブレーク命令の例外-コード80000003(最初のチャンス)
この特定のメッセージは例外、つまりファーストチャンス例外です。 基本的に、例外はプログラムの実行中に発生する特別な条件です。 ファーストチャンス例外とは、例外がスローされた直後にプログラムが停止したことを意味します。 セカンドチャンス例外とは、例外が発生した後、いくつかの操作が実行され、プログラムがその作業を停止することを意味します。
レジスター
メッセージと例外を表示した後、デバッガはプロセッサレジスタの状態を出力します。 レジスタは、情報の小さなチャンクを格納したり、メモリ内の何かの状態を追跡したりする、プロセッサ内の特別な変数です。 プロセッサは、これらのレジスタの情報を非常に迅速に処理できます。 これは、バス上のRAMから毎回情報を取得するよりもはるかに高速です。
calc.exeに接続すると、WinDBGは次のレジスタに関する情報を自動的に表示します。
eax = 7ffd9000 ebx = 00000000 ecx = 00000000 edx = 776cd23d esi = 00000000 edi = 00000000
cs = 001b ss = 0023 ds = 0023 es = 0023 fs = 003b gs = 0000 efl = 00000246
後で、rコマンドを使用してこの情報を再度複製できます。
0:005> r
eax = 7ffd9000 ebx = 00000000 ecx = 00000000 edx = 776cd23d esi = 00000000 edi = 00000000
eip = 77663540 esp = 02affd9c ebp = 02affdc8 iopl = 0 nv up ei pl zr na pe nc
cs = 001b ss = 0023 ds = 0023 es = 0023 fs = 003b gs = 0000 efl = 00000246
ntdll!DbgBreakPoint:
77663540 cc int 3
特定のレジスタの値を取得する場合は、次のコマンドを実行できます。
0:005> r eax
eax = 7ffd9000
複数のレジスタから同時に情報を取得するには、次のようにします。
0:005> r eax、ebp
eax = 7ffd9000 ebp = 02affdc8
命令へのポインタ
最後のコマンドは実行可能命令専用です。 ここでは、rコマンドの場合と同様に、EIPレジスタに含まれている情報も画面に表示されます。 EIPは、プロセッサが実行する次の命令の場所を含むレジスタです。 WinDBGが表示するのは、u eip L1コマンドと同等です。その後、WinDBGはEIPレジスタで指定されたアドレスに移動し、このセクションをアセンブリコードに変換して、画面に表示します。
ntdll!DbgBreakPoint:
77663540 cc int 3
連絡を取り合う
今後の記事では、ライブ環境でWinDBGを使用する方法(ブレークポイント、段階的なデバッグ、メモリスキャン)について説明します。 切り替えないでください! NS。
2010年6月22日
以前は、Windbgを個別にダウンロードできました。 ただし、最新バージョンの場合、MicrosoftはそれをWindowsSDKの一部として保持しています。 以下のダウンロードリンクを見つけてください。
ウィンドウズ10
Windbg for Windows 7の最新バージョンは、リンクhttps://developer.microsoft.com/en-us/windows/downloads/windows-10-sdkからダウンロードできます。
Windows 7
上記のリンクからインストーラーをダウンロードします。 これはSDK全体をダウンロードするのではなく、単なるインストーラーであることに注意してください。 ファイルを実行したら、ダウンロードするツールを選択できます。 Windbgのみに関心がある場合は、他のすべてを除外して、[CommonUtilities]の下の[Debuggingtools]のみを選択できます。
上記のパッケージは、windbg6.12バージョンをインストールします。 windbgをすばやくインストールしたい場合は、からダウンロードできる古いバージョン(6.11)を選択できます。
この投稿の最後にあるリンク。
インストールが完了すると、[スタート]メニュー-> [すべてのプログラム]-> [Windows用のデバッグツール]-> [Windbg]にプログラムが表示されます。
Windows用のデバッグツール-Windowsオペレーティングシステムのコードをデバッグするためのツール。 これらは、ユーザーモードおよびカーネルモードのコード(アプリケーション、ドライバー、サービス、カーネルモジュール)をデバッグするために設計されたMicrosoftの無料ソフトウェアのセットです。 ツールキットには、コンソールおよびGUIデバッガー、シンボル、ファイル、プロセスを操作するためのユーティリティ、およびリモートデバッグを提供するためのユーティリティが含まれています。 ツールキットには、システムのさまざまなコンポーネントの障害の原因を見つけることができるユーティリティが含まれています。 Windows用のデバッグツールある時点から、スタンドアロンの配布キットの形式でダウンロードすることはできず、Windows SDK(Windowsソフトウェア開発キット)に含まれています。 次に、Windows SDKはMSDNサブスクリプションプログラムの一部として利用可能であるか、msdn.microsoft.comからスタンドアロンディストリビューションとして無料でダウンロードできます。 開発者によると、Windows用のデバッグツールの最新かつ最新のバージョンがWindowsSDKに含まれています。
Windows用のデバッグツールは更新され、頻繁に公開されます。このプロセスは、オペレーティングシステムのリリースに依存しません。 したがって、定期的に新しいバージョンを確認してください。
ここで、特にMicrosoftWindows用のデバッグツールで何ができるかを見てみましょう。
- ローカルアプリケーション、サービス(サービス)、ドライバー、カーネルをデバッグします。
- ネットワークを介してリモートアプリケーション、サービス(サービス)、ドライバー、カーネルをデバッグします。
- 実行中のアプリケーションをリアルタイムでデバッグします。
- アプリケーションメモリ、カーネル、およびシステム全体のダンプファイルを分析します。
- x86 / x64 / Itaniumアーキテクチャに基づくシステムで動作します。
- ユーザーモードおよびカーネルモードのプログラムをデバッグします。
次のバージョンのWindows用デバッグツールを使用できます:32ビットx86、Intel Itanium、64ビットx64。 x86またはx64の2つが必要です。
Windows用のデバッグツールをインストールする方法はいくつかありますが、この記事では主な方法のみを検討します。
- Webインストーラを介したインストール。
- Windows SDKISOイメージからのWindows用デバッグツールのインストール。
- dbg_amd64.msi / dbg_x86.msiパッケージから直接Windows用のデバッグツールをインストールします。
どの時点でデバッグツールキットをコンピューターにインストールする必要があるのかは不明です。 結局のところ、作業環境への干渉が非常に望ましくない状況に直面することがよくあります。 さらに、新製品のインストール、つまりレジストリ/システムファイルへの変更は完全に受け入れられない場合があります。 例としては、ミッションクリティカルなサーバーがあります。 なぜ開発者は、インストールを必要としないアプリケーションのポータブル(ポータブル)バージョンのオプションについて考えないのですか?
Debugging Tools for Windowsパッケージのインストールプロセスは、バージョンごとにいくつかの変更が加えられています。 それでは、インストールプロセスに飛び込んで、ツールキットをインストールする方法を見てみましょう。
Webインストーラーを使用したWindows用のデバッグツールのインストール
Windows SDKアーカイブページに移動し、「Windows 10 SDK(10586)およびMicrosoft Windows 10モバイルデバイスエミュレーター(バージョン10586.11)」という項目の下にあるWindows10というセクションを見つけます。
アイテムをクリックします SDKをインストールします..。 クリックした後、sdksetup.exeファイルをダウンロードして実行します。これにより、WindowsSDKのオンラインインストールが開始されます。 初期段階で、インストーラーはシステムにインストールされている.NET Frameworkパッケージの最新バージョン(現在は4.5)を確認します。 パッケージが見つからない場合は、インストールが提供され、完了時にステーションが再起動されます。 再起動直後、ユーザー認証の段階で、インストールプロセスはWindowsSDKから直接開始されます。
多くの場合、例外なくパッケージのすべてのコンポーネントを選択すると、インストールプロセス中にエラーが発生する可能性があります。 この場合、必要最小限のセットであるコンポーネントを選択的にインストールすることをお勧めします。
Debugging Tools for Windowsのインストールが完了すると、このインストール方法のデバッグファイルの場所は次のようになります。
- 64ビットバージョン: C:\プログラムファイル(x86)\ Windowsキット\ x.x \デバッガー\ x64
- 32ビットバージョン: C:\プログラムファイル(x86)\ Windowsキット\ x.x \デバッガー\ x86
*ここで、x.xは開発キットの特定のバージョンです。
バージョン8以降では、インストールパスが以前のすべてのバージョンのデバッグツールの従来のパスと著しく異なることに気づきましたか?
Debigging Tools for Windowsをインストールするこの方法の大きな利点は、すべてのアーキテクチャのデバッグツールのバージョンを一度にインストールできることです。
Windows SDKISOイメージからのWindows用デバッグツールのインストール
この方法では、Windows SDK(Software Developers Kit)の完全なインストールイメージを使用して、Windows用のデバッグツールをインストールします。 一定の時間まで、WindowsSDKアーカイブページで対応するシステムのISOイメージをダウンロードすることができました。 ただし、現時点では、Webインストーラーsdksetup.exeを実行し、アイテムを選択することで、SDKのISOイメージを取得できます。 Windowsソフトウェア開発キットをダウンロードするインストーラーの開始ウィンドウ:
判明したように、Webインストーラーを使用した以前のインストール方法は非常に気まぐれで、失敗することがよくあります。 クリーンなシステムでは問題なくインストールされますが、十分に負荷がかかっているシステムでは多くの問題が発生します。 そのような場合は、この方法を使用してください。
したがって、このページで必要な配布キットを選択する必要があります。私にとって(そして多くの人にとっては)現時点では「WindowsSDK for Windows7および.NETFramework 4」であり、すぐ下のリンクをクリックします。 DVDディスクのISOイメージ」..。
msdn.microsoft.com Webサイトで作業するときは、競合する製品が動作しない場合があるため、InternetExplorerブラウザーを使用することをお勧めします。
したがって、必要な場合にのみ選択する必要があります。 通常、Windows用のデバッグツールのビット数は、システムのビット数と同じです。 調査中のシステムはほとんど64ビットであるため、ほとんどの場合、64ビットシステムGRMSDKX_EN_DVD.isoのイメージをダウンロードします。
次に、イメージをダウンロードした後、既存のISOイメージを何らかの方法で操作する必要があります。 もちろん、従来の方法はCDを作成することですが、これはかなり長く、場合によってはコストのかかる方法です。 システムで仮想ディスクデバイスを作成するには、無料のユーティリティを使用することをお勧めします。 個人的には、この目的のためにDEAMON ToolsLiteプログラムを使用することを好みます。 誰かが言うように、他の好み、より直接的または軽量のユーティリティ、味と色を持っているかもしれません.. DAEMON Tools Liteをインストールした後、画像ファイルGRMSDKX_EN_DVD.isoをダブルクリックするだけで、新しい仮想コンパクトディスクができます。
次に、ダブルクリックして、自動ロードをアクティブにし、WindowsSDKのインストールを開始します。
リストからインストールするコンポーネントを選択する順番になると、スクリーンショットにマークされているものを除くすべてのオプションを完全に無効にします。 これは、今私たちにとって不必要な間違いを避けるのに役立ちます。
スクリーンショットでは、「WindowsPerformanceToolkit」と「DebuggingToolsforWindows」の2つのオプションがマークされています。 Windows Performance Toolkitは間違いなくあなたの仕事に役立つので、両方を選択してください! さらに、「次へ」ボタンをクリックした後、通常通りインストールを続行します。 そして最後に「インストール完了」という碑文が表示されます。
インストールが完了すると、Windows用のデバッグツールセットの作業ディレクトリは次のようになります。
- x86バージョンの場合:
- x64バージョンの場合:
これで、Windows用のデバッグツールのインストールが完了しました。
.msiファイルを介したWindows用デバッグツールのインストール
以前の2つの方法でWindows用のデバッグツールのインストール中に問題が発生した場合でも、最も信頼性が高く、実績のあるツールがもう1つあり、いわば複数回使用できます。 昔々、Windows SDKに統合される前は、Windows用のデバッグツールが個別の.msiインストーラーとして利用可能でしたが、現在でもWindowsSDK配布キットの腸に含まれています。 Windows SDKのISOイメージはすでに手元にあるため、システムにマウントすることはできません。有名なWinRARアーカイバ、またはISOディスクのコンテンツを処理するその他の製品を使用して開くだけです。
イメージを開いた後、ルートにある「セットアップ」ディレクトリに移動し、ディレクトリの1つを選択する必要があります。
- 64ビットバージョンをインストールするには: \セットアップ\ WinSDKDebuggingTools_amd64そして、このディレクトリからdbg_amd64.msiファイルを解凍します。
- 32ビットバージョンをインストールするには:\ Setup \ WinSDKDebuggingToolsそして、このディレクトリからdbg_x86.msiファイルを解凍します。
インストールが完了すると、Windows用のデバッグツールセットの作業ディレクトリは次のようになります。
- x86バージョンの場合: C:\プログラムファイル(x86)\ Windows用デバッグツール(x86)
- x64バージョンの場合: C:\プログラムファイル\ Windows用デバッグツール(x64)
この時点で、Windows用のデバッグツールのインストールは完了です。
追加情報
何に接続されているのか、おそらく不注意でわかりませんが、Windows用のデバッグツールをインストールした後、インストーラーはディレクトリへのパスをデバッガーのPathシステム変数に登録しません。 これにより、コンソールから直接さまざまなデバッグタスクを実行する際に特定の制限が課せられます。 したがって、パスがない場合、私自身がウィンドウに書き込みます 環境変数デバッグツールへのパス:
- C:\プログラムファイル(x86)\ Windowsキット\ 10 \デバッガー\ x86
- C:\プログラムファイル(x86)\ Windowsキット\ 10 \デバッガー\ x64
*あなたの場合、異なるビット数のOSを使用していることと、異なるバージョンのSDKを使用していることの両方により、パスが異なる場合があります。
Windowsパッケージユーティリティのデバッグツールはポータブルアプリケーションとして機能します。作業中のシステムからディレクトリをコピーするだけです。 Microsoft Windows Performance Toolkit実稼働サーバーでポータブルバージョンとして使用します。 しかし、システムの容量を考慮することを忘れないでください!! 重要なシステムにパッケージを完全にインストールした場合でも、インストール後すぐに作業を開始できます。再起動は必要ありません。
Windowsコンポジション用のデバッグツール
そして最後に、Windows用のデバッグツールの構成を示します。
ファイル | 予定 |
---|---|
adplus.doc | ADPlusユーティリティのドキュメント。 |
adplus.exe | cdbデバッガーを自動化して、1つ以上のプロセスのダンプやログファイルを作成するコンソールアプリケーション。 |
agestore.exe | シンボルサーバーまたはソースサーバーが使用するリポジトリから廃止されたファイルを削除するためのユーティリティ。 |
breakin.exe | Ctrl + Cキーを押すのと同様に、ユーザー定義のブレークの組み合わせをプロセスに送信できるユーティリティ。 |
cdb.exe | ユーザーモードのコンソールデバッガー。 |
convertstore.exe | シンボルを2層から3層に変換するためのユーティリティ。 |
dbengprx.exe | リモートデバッグ用のリーパー(プロキシサーバー)。 |
dbgrpc.exe | RPC呼び出しのステータスに関する情報を表示するためのユーティリティ。 |
dbgsrv.exe | リモートデバッグに使用されるサーバープロセス。 |
dbh.exe | シンボルファイルの内容に関する情報を表示するためのユーティリティ。 |
dumpchk.exe | ダンプチェックユーティリティ。 ダンプファイルをすばやくチェックするためのユーティリティ。 |
dumpexam.exe | メモリダンプを分析するためのユーティリティ。 結果は%SystemRoot%\ MEMORY.TXTに表示されます。 |
gflags.exe | システムのグローバルフラグの編集者。 ユーティリティは、レジストリキーおよびその他の設定を管理します。 |
i386kd.exe | kdのラッパー。 x86マシン用のWindowsNT / 2000ベースのシステムではいつkdと呼ばれましたか? おそらく互換性の理由で残されています。 |
ia64kd.exe | kdのラッパー。 ia64マシン用のWindowsNT / 2000ベースのシステムではいつkdと呼ばれましたか? おそらく互換性の理由で残されています。 |
kd.exe | カーネルモードのコンソールデバッガー。 |
kdbgctrl.exe | カーネルデバッグ管理ツール。 カーネルデバッグ接続を管理および構成するためのユーティリティ。 |
kdsrv.exe | KDの接続サーバー。 このユーティリティは、起動してリモート接続を待機する小さなアプリケーションです。 kdはクライアント上で実行され、リモートデバッグのためにそのサーバーに接続します。 サーバーとクライアントの両方が同じデバッグツールアセンブリからのものである必要があります。 |
kill.exe | プロセスを終了するためのユーティリティ。 |
list.exe | ファイルの内容を画面に表示するためのユーティリティ。 バンドルでは、このミニチュアユーティリティは、大きなテキストまたはログファイルを表示するという1つの目的を持っていることが判明しました。 テキストをチャンクでロードするため、メモリスペースをほとんど使用しません。 |
logger.exe | 1つのプロセスでのみ機能するミニチュアデバッガー。 ユーティリティはlogexts.dllをプロセススペースに挿入します。プロセススペースは、調査中のプログラムのすべての関数呼び出しとその他のアクションを記録します。 |
logviewer.exe | logger.exeデバッガーによって書き込まれたログを表示するためのユーティリティ。 |
ntsd.exe | Microsoft NTシンボリックデバッガ(NTSD)。 デバッガー。起動時にテキストボックスを作成することを除いて、cdbと同じです。 cdbと同様に、ntsdはコンソールアプリケーションとグラフィカルアプリケーションの両方をデバッグできます。 |
pdbcopy.exe | シンボルファイルからプライベートシンボルを削除するためのユーティリティ。シンボルファイルに含まれるパブリックシンボルを制御します。 |
remote.exe | KD、CDB、およびNTSDコンソールデバッガーのリモートデバッグおよびリモート制御用のユーティリティ。 これらすべてのコンソールデバッガーをリモートで実行できます。 |
rtlist.exe | リモートタスクビューア。 このユーティリティは、DbgSrvサーバープロセスを介して実行中のプロセスを一覧表示するために使用されます。 |
symchk.exe | Microsoftシンボルサーバーからシンボルをダウンロードし、ローカルシンボルキャッシュを作成するユーティリティ。 |
symstore.exe | シンボルのネットワークまたはローカルストレージを作成するためのユーティリティ(2層/ 3層)。 シンボルストアは、特定の構造に従って構築され、シンボルを含むディスク上の特殊なディレクトリです。 シンボルのルートディレクトリには、コンポーネントの名前と同じ名前でサブフォルダの構造が作成されます。 次に、これらの各サブフォルダーには、バイナリファイルをハッシュすることによって取得された特別な名前を持つネストされたサブフォルダーが含まれます。 symstoreユーティリティは、コンポーネントフォルダをスキャンし、新しいコンポーネントをシンボルストアに追加して、クライアントがそれらを取得できるようにします。 シンボルストアは、0層ストレージからシンボルを取得し、それらを2層/ 3層ストレージに配置するために使用されると言われています。 |
tlist.exe | タスクビューア。 実行中のすべてのプロセスを一覧表示するためのユーティリティ。 |
umdh.exe | ユーザーモードのダンプヒープユーティリティ。 選択したプロセスのヒープ(ヒープ)を分析するためのユーティリティ。 ヒープのさまざまなオプションを表示できます。 |
usbview.exe | USBビューア。 コンピュータに接続されているUSBデバイスを表示するためのユーティリティ。 |
vmdemux.exe | 仮想マシンデマルチプレクサ。 1つのCOM接続に対して複数の名前付きパイプを作成します。 チャネルは、仮想マシンのさまざまなコンポーネントをデバッグするために使用されます |
windbg.exe | GUIユーザーモードおよびカーネルモードデバッガー。 |