コンピューター ウィンドウズ インターネット

Windows用のデバッグツールのインストール。 Windowsデバッグツール:Windows用のBSODデバッグツールの診断と修正

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オペレーティングシステムが中断し、ブルースクリーン(BSOD)が表示されます。 コンテンツ ランダム・アクセス・メモリ発生したエラーに関するすべての情報がページングファイルに書き込まれます。 次は Windowsの起動保存されたデータに基づいて、デバッグ情報を含むクラッシュダンプが作成されます。 重大なエラーエントリがシステムイベントログに生成されます。

注意!ディスクサブシステムに障害が発生した場合、または クリティカル・エラー Windows起動の初期段階で登場しました。

Windowsクラッシュダンプの種類

現在のオペレーティングシステムであるWindows10(Windows Server 2016)の例を使用して、システムが作成できる主な種類のメモリダンプについて検討します。

  • 小さなメモリダンプ(256KB)。 このファイルタイプには、最小限の情報が含まれています。 これには、BSODエラーメッセージ、ドライバーに関する情報、クラッシュ時にアクティブだったプロセス、およびクラッシュの原因となったプロセスまたはカーネルスレッドのみが含まれます。
  • カーネルメモリダンプ..。 通常、サイズは小さく、物理メモリの3分の1です。 カーネルメモリダンプは、ミニダンプよりも冗長です。 カーネルモードのドライバーとプログラムに関する情報が含まれ、Windowsカーネルとハードウェアアブストラクションレイヤー(HAL)に割り当てられたメモリ、およびカーネルモードのドライバーと他のプログラムに割り当てられたメモリが含まれます。
  • 完全なメモリダンプ..。 ボリュームが最大で、システムのRAMに1MBを加えたものに等しいメモリが必要です。 必要なウィンドウこのファイルを作成します。
  • 自動メモリダンプ..。 情報の観点からカーネルメモリダンプに対応します。 ダンプファイルの生成に使用するスペースの量だけが異なります。 このファイルタイプはWindows7には存在しませんでした。Windows8で追加されました。
  • アクティブメモリダンプ..。 このタイプは、システム障害の原因を特定できない項目を除外します。 これはWindows10で追加されたもので、仮想マシンを使用している場合、またはシステムがHyper-Vホストである場合に特に役立ちます。

Windowsでメモリダンプを有効にするにはどうすればよいですか?

Win + Pauseを使用してシステム設定ウィンドウを開き、「 追加のシステムパラメータ"(高度なシステム設定)。 タブで「 さらに「(詳細)、セクション」「(起動と回復)クリック」 オプション"(設定)。 開いたウィンドウで、システム障害が発生した場合のアクションを構成します。 チェックボックス「 システムログにイベントを書き込む(システムログにイベントを書き込みます)、システムがクラッシュしたときに生成されるダンプのタイプを選択します。 チェックボックスにある場合「 既存のダンプファイルを置き換える「(既存のファイルを上書きする)チェックボックスをオンにすると、失敗するたびにファイルが上書きされます。 このチェックボックスを削除することをお勧めします。そうすると、分析のためのより多くの情報が得られます。 また、[自動再起動]を無効にします。

ほとんどの場合、BSODの原因を分析するには、小さなメモリダンプで十分です。

これで、BSODが発生したときに、ダンプファイルを分析して、クラッシュの原因を見つけることができます。 ミニダンプは、デフォルトで%systemroot%\ minidumpフォルダーに保存されます。 ダンプファイルを分析するには、プログラムの使用をお勧めします WinDBG(Microsoftカーネルデバッガ).

WindowsへのWinDBGのインストール

効用 WinDBGに含まれています Windows 10 SDK"(Windows 10 SDK)。 ..。

ファイルは呼び出されます winsdksetup.exe、サイズ1.3MB。

インストールを実行し、実行する内容を正確に選択します。このコンピューターにパッケージをインストールするか、他のコンピューターにインストールするためにダウンロードします。 パッケージをローカルコンピューターにインストールします。

パッケージ全体をインストールできますが、デバッグツールのみをインストールするには、[ Windows用のデバッグツール.

インストールすると、WinDBGショートカットはスタートメニューにあります。

.dmpファイルとWinDBGの関連付けの構成

クリックするだけでダンプファイルを開くには、.dmp拡張子をWinDBGユーティリティと一致させます。

  1. 開く コマンドライン管理者として、64ビットシステムのコマンドを実行します。cdC:\プログラムファイル(x86)\ Windowsキット\ 10 \デバッガー\ x64
    windbg.exe –IA
    32ビットシステムの場合:
    C:\プログラムファイル(x86)\ Windowsキット\ 10 \デバッガー\ x86
    windbg.exe –IA
  2. その結果、ファイルタイプ:.DMP、.HDMP、.MDMP、.KDMP、.WEW-がWinDBGに関連付けられます。

WinDBGでのデバッグシンボルサーバーの設定

デバッグシンボル(デバッグシンボルまたはシンボルファイル)は、実行可能ファイルとともにプログラムのコンパイル中に生成されるデータのブロックです。 このようなデータブロックには、関数、ライブラリなどと呼ばれる変数の名前に関する情報が含まれています。 このデータは、プログラムの実行時には必要ありませんが、デバッグ時には役立ちます。 Microsoftコンポーネントは、Microsoft SymbolServerを通じて配布されるシンボルを使用してコンパイルされます。

WinDBGを次のように構成します マイクロソフトの使用シンボルサーバー:

  • WinDBGを開きます。
  • メニューに移動 ファイル –> シンボルファイルパス;
  • MicrosoftサイトからデバッグシンボルをダウンロードするためのURLと、キャッシュを保存するためのフォルダーを含む行を追加します。SRV* E:\ Sym_WinDBG * http://msdl.microsoft.com/download/symbolsこの例では、キャッシュがロードされます。 E:\ Sym_WinDBGフォルダーに、任意のフォルダーを指定できます。
  • メニューへの変更を保存することを忘れないでください ファイル–>WorkSpaceを保存します。

WinDBGは、ローカルフォルダー内のシンボルを検索し、必要なシンボルが見つからない場合は、指定されたサイトからシンボルを自動的にダウンロードします。 シンボルを含む独自のフォルダを追加する場合は、次のように実行できます。

SRV * E:\ Sym_WinDBG * http://msdl.microsoft.com/download/symbols; c:\ Symbols

インターネットに接続していない場合は、最初にWindowsシンボルパッケージリソースからシンボルパックをダウンロードしてください。

WinDBGでのクラッシュダンプ分析

WinDBGデバッガーは、ダンプファイルを開き、ローカルフォルダーまたはインターネットから必要なデバッグシンボルをダウンロードします。 このプロセス中は、WinDBGを使用できません。 ウィンドウの下部(デバッガーのコマンドライン)に、碑文が表示されます 被デバッグ者が接続されていません。

コマンドは、ウィンドウの下部にあるコマンドラインに入力されます。

注意すべき最も重要なことはエラーコードです。これは常に16進値で示され、次のようになります。 0xXXXXXXXX(オプションの1つで示されます-STOP:、02.07.2019 0008F、0x8F)。 この例では、エラーコードは0x139です。

デバッガーは、!Analyze -vコマンドを実行するように要求します。リンクの上にマウスを置いて、クリックするだけです。 このコマンドは何のためにありますか?

  • メモリダンプの予備分析を実行し、提供します 詳細な情報分析を開始します。
  • このコマンドは、STOPコードとエラーの記号名を表示します。
  • これは、異常終了の原因となったコマンドのコールスタックを示しています。
  • さらに、IPアドレス、プロセス、およびレジスタの障害がここに表示されます。
  • チームは、問題を解決するための既成の推奨事項を提供できます。

!Analyze –vコマンドを実行した後に分析するときに注意する必要がある主なポイント(リストは不完全です)。

1:kd>!-vを分析する


* *
*バグチェック分析*
* *
*****************************************************************************
STOPエラーの記号名(BugCheck)
KERNEL_SECURITY_CHECK_FAILURE(139)
エラーの説明(カーネルコンポーネントが重要なデータ構造を破損しています。この破損により、攻撃者がこのマシンを制御できる可能性があります):

カーネルコンポーネントが重要なデータ構造を破壊しました。 破損により、悪意のあるユーザーがこのマシンを制御できるようになる可能性があります。
エラー引数:

引数:
Arg1:0000000000000003、LIST_ENTRYが破損しています(つまり、二重削除)。
Arg2:ffffd0003a20d5d0、バグチェックの原因となった例外のトラップフレームのアドレス
Arg3:ffffd0003a20d528、バグチェックの原因となった例外の例外レコードのアドレス
Arg4:0000000000000000、予約済み
デバッグの詳細:
------------------

カウンターは、システムが同様のエラーでクラッシュした回数を示します。

CUSTOMER_CRASH_COUNT:1

DEFAULT_BUCKET_ID:FAIL_FAST_CORRUPT_LIST_ENTRY

省略形のSTOPエラーコード:

BUGCHECK_STR:0x139

実行中に障害が発生したプロセス(必ずしもエラーの原因ではなく、このプロセスが実行されていたメモリの障害が発生したとき):

PROCESS_NAME:sqlservr.exe

エラーコードの復号化:システムがこのアプリケーションでスタックバッファオーバーフローを検出しました。これにより、攻撃者がこのアプリケーションを制御できる可能性があります。

ERROR_CODE:(NTSTATUS)0xc0000409-システムは、このアプリケーションでスタックベースのバッファのオーバーランを検出しました。 このオーバーランにより、悪意のあるユーザーがこのアプリケーションを制御できるようになる可能性があります。
EXCEPTION_CODE:(NTSTATUS)0xc0000409-システムは、このアプリケーションでスタックベースのバッファのオーバーランを検出しました。 このオーバーランにより、悪意のあるユーザーがこのアプリケーションを制御できるようになる可能性があります。

スタックの最後の呼び出し:

LAST_CONTROL_TRANSFER:fffff8040117d6a9からfffff8040116b0a0へ

失敗時のコールスタック:

STACK_TEXT:
ffffd000`3a20d2a8 fffff804`0117d6a9:00000000`00000139 00000000`00000003 ffffd000`3a20d5d0 ffffd000`3a20d528:nt!KeBugCheckEx
ffffd000`3a20d2b0 fffff804`0117da50:ffffe000`f3ab9080 ffffe000`fc37e001 ffffd000`3a20d5d0 fffff804`0116e2a2:nt!KiBugCheckDispatch + 0x69
ffffd000`3a20d3f0 fffff804`0117c150:00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000:nt!KiFastFailDispatch + 0xd0
ffffd000`3a20d5d0 fffff804`01199482:ffffc000`701ba270 ffffc000`00000001 000000ea`73f68040 fffff804`000006f9:nt!KiRaiseSecurityCheckFailure + 0x3d0
ffffd000`3a20d760 fffff804`014a455d:00000000`00000001 ffffd000`3a20d941 ffffe000`fcacb000 ffffd000`3a20d951:nt! ?? :: FNODOBFM :: `文字列" + 0x17252
ffffd000`3a20d8c0 fffff804`013a34ac:00000000`00000004 00000000`00000000 ffffd000`3a20d9d8 ffffe001`0a34c600:nt!IopSynchronousServiceTail + 0x379
ffffd000`3a20d990 fffff804`0117d313:ffffffff`fffffffe 00000000`00000000 00000000`00000000 000000eb`a0cf1380:nt!NtWriteFile + 0x694
ffffd000`3a20da90 00007ffb`475307da:00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000:nt!KiSystemServiceCopyEnd + 0x13
000000ee`f25ed2b8 00000000`00000000:00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000:0x00007ffb`475307da

エラーが発生したコードのセクション:

FOLLOWUP_IP:
nt!KiFastFailDispatch + d0
fffff804`0117da50 c644242000 movバイトptr、0
FAULT_INSTR_CODE:202444c6
SYMBOL_STACK_INDEX:2
SYMBOL_NAME:nt!KiFastFailDispatch + d0
FOLLOWUP_NAME:MachineOwner

カーネルオブジェクトテーブル内のモジュールの名前。 アナライザーが問題のあるドライバーを検出すると、その名前がMODULE_NAMEフィールドとIMAGE_NAMEフィールドに表示されます。

MODULE_NAME:nt
IMAGE_NAME:ntkrnlmp.exe

1:kd> lmvm nt
モジュールリスト全体を閲覧する
ロードされたシンボル画像ファイル:ntkrnlmp.exe
マップされたメモリイメージファイル:C:\ ProgramData \ dbg \ sym \ ntoskrnl.exe \ 5A9A2147787000 \ ntoskrnl.exe
画像パス:ntkrnlmp.exe
画像名:ntkrnlmp.exe
InternalName:ntkrnlmp.exe
OriginalFilename:ntkrnlmp.exe
ProductVersion:6.3.9600.18946
FileVersion:6.3.9600.18946(winblue_ltsb_escrow.180302-1800)

上記の例では、分析はカーネルファイルntkrnlmp.exeを指しています。 メモリダンプ分析がシステムドライバ(win32k.sysなど)またはカーネルファイル(この例ではntkrnlmp.exeなど)を指している場合、その可能性が最も高いです。 このファイル問題の原因ではありません。 多くの場合、問題はデバイスドライバにあります。 BIOS設定またはハードウェアの誤動作。

BSODがサードパーティのドライバによって引き起こされていることがわかった場合、その名前はMODULE_NAME値とIMAGE_NAME値で指定されます。

例えば:

イメージパス:\ SystemRoot \ system32 \ drivers \ cmudaxp.sys
画像名:cmudaxp.sys

ドライバファイルを開き、そのバージョンを確認します。 ほとんどの場合、ドライバーの問題はドライバーを更新することで解決されます。

Windows用のデバッグツール-オペレーティングコードツールのデバッグ Windowsシステム..。 これらは、ユーザーモードおよびカーネルモードのコード(アプリケーション、ドライバー、サービス、カーネルモジュール)をデバッグするために設計されたMicrosoftの無料ソフトウェアのセットです。 ツールキットには、コンソールおよびGUIデバッガー、シンボル、ファイル、プロセスを操作するためのユーティリティ、およびリモートデバッグを提供するためのユーティリティが含まれています。 ツールキットには、システムのさまざまなコンポーネントの障害の原因を見つけることができるユーティリティが含まれています。 Windows用のデバッグツールある時点から、スタンドアロンの配布キットの形式でダウンロードすることはできず、Windows SDK(Windowsソフトウェア開発キット)に含まれています。 インストルメンタルセット Windowsツール次に、SDKはMSDNサブスクリプションプログラムの一部として利用可能であるか、msdn.microsoft.comからスタンドアロンディストリビューションとして無料でダウンロードできます。 開発者によると、最後で最も 現行版 Windows用のデバッグツールは、WindowsSDKに含まれています。

Windows用のデバッグツールは更新され、頻繁に公開されます。このプロセスは、オペレーティングシステムのリリースにまったく依存しません。 したがって、定期的に新しいバージョンを確認してください。

特に、何のためのデバッグツールを見てみましょう マイクロソフトウィンドウズ:

  • ローカルアプリケーション、サービス(サービス)、ドライバー、カーネルをデバッグします。
  • ネットワークを介してリモートアプリケーション、サービス(サービス)、ドライバー、カーネルをデバッグします。
  • 実行中のアプリケーションをリアルタイムでデバッグします。
  • アプリケーションメモリ、カーネル、およびシステム全体のダンプファイルを分析します。
  • x86 / x64 / Itaniumアーキテクチャに基づくシステムで動作します。
  • ユーザーモードおよびカーネルモードのプログラムをデバッグします。

次のバージョンのWindows用デバッグツールを使用できます:32ビットx86、Intel Itanium、64ビットx64。 x86またはx64の2つが必要です。

Windows用のデバッグツールをインストールする方法はいくつかありますが、この記事では主な方法のみを検討します。

  • Webインストーラを介したインストール。
  • ISOからWindows用のデバッグツールをインストールする Windowsイメージ SDK。
  • dbg_amd64.msi / dbg_x86.msiパッケージから直接Windows用のデバッグツールをインストールします。

どの時点でデバッグツールキットをコンピューターにインストールする必要があるのか​​は不明です。 多くの場合、結局のところ、あなたは介入が 作業環境非常に望ましくありません! さらに、新製品のインストール、つまりレジストリ/システムファイルへの変更は完全に受け入れられない場合があります。 例としては、ミッションクリティカルなサーバーがあります。 開発者は、インストールを必要としないポータブル(ポータブル)バージョンのアプリケーションのオプションについて考えないのはなぜですか?
Debugging Tools for Windowsパッケージのインストールプロセスは、バージョンごとにいくつかの変更が加えられています。 それでは、インストールプロセスに飛び込んで、ツールキットをインストールする方法を見てみましょう。

Webインストーラーを使用したWindows用のデバッグツールのインストール

Windows SDKアーカイブページに移動し、下のセクションを見つけます Windows名 10以下については、「Windows 10 SDK(10586)およびMicrosoft Windows 10 Mobile Device Emulator(バージョン10586.11)」を参照してください。

アイテムをクリックします SDKをインストールします..。 クリックした後、sdksetup.exeファイルをダウンロードして実行します。これにより、WindowsSDKのオンラインインストールが開始されます。 初期段階で、インストーラーは.NETFrameworkパッケージがシステムにインストールされているかどうかを確認します。 最新バージョン(現在4.5)。 パッケージが見つからない場合は、インストールが提供され、完了時にステーションが再起動されます。 再起動直後、ユーザー認証の段階で、インストールプロセスはWindowsSDKから直接開始されます。

多くの場合、例外なくパッケージのすべてのコンポーネントを選択すると、インストールプロセス中にエラーが発生する可能性があります。 この場合、必要最小限のセットであるコンポーネントを選択的にインストールすることをお勧めします。

Debugging Tools for Windowsのインストールが完了すると、このインストール方法のデバッグファイルの場所は次のようになります。

  • 64ビットバージョン: C:\プログラムファイル(x86)\ Windowsキット\ x.x \デバッガー\ x64
  • 32ビットバージョン: C:\プログラムファイル(x86)\ Windowsキット\ x.x \デバッガー\ x86

*ここで、x.xは開発キットの特定のバージョンです。
バージョン8以降では、インストールパスが従来のパスとは著しく異なることに気づきました。 以前のバージョンデバッグツール?

大きなプラス この方法 Windows用のDebiggingToolsのインストールは、すべてのアーキテクチャのデバッグツールのバージョンを一度にインストールすることです。

Windows SDKISOイメージからのWindows用デバッグツールのインストール

この方法では、Windows SDK(Software Developers Kit)の完全なインストールイメージを使用して、Windows用のデバッグツールをインストールします。 一定時間までダウンロード ISOイメージ対応するシステムの場合は、WindowsSDKアーカイブページにあります。 ただし、現時点では、Webインストーラーsdksetup.exeを実行し、アイテムを選択することで、SDKのISOイメージを取得できます。 Windowsソフトウェア開発キットをダウンロードするインストーラーの開始ウィンドウ:

判明したように、Webインストーラーを使用した以前のインストール方法は非常に気まぐれで、失敗することがよくあります。 クリーンなシステムでは問題なくインストールされますが、十分に負荷がかかっているシステムでは多くの問題が発生します。 そのような場合は、この方法を使用してください。

したがって、このページで必要な配布キットを選択する必要があります。私にとって(そして多くの人にとっては)現時点では「WindowsSDK for Windows7および.NETFramework 4」であり、すぐ下のリンクをクリックします。 DVDディスクのISOイメージ」..。

サイトmsdn.microsoft.comで作業するときは、ブラウザを使用することをお勧めします インターネットエクスプローラ競合製品が動作不能になる場合がありますので!

したがって、必要な場合にのみ選択する必要があります。 通常、Windows用のデバッグツールのビット数は、システムのビット数と同じです。 調査中のシステムはほとんど64ビットであるため、ほとんどの場合、64ビットシステムGRMSDKX_EN_DVD.isoのイメージをダウンロードします。
次に、イメージをダウンロードした後、既存のISOイメージを何らかの方法で操作する必要があります。 もちろん、従来の方法はCDを作成することですが、これはかなり長く、場合によってはコストのかかる方法です。 システムで仮想ディスクデバイスを作成するには、無料のユーティリティを使用することをお勧めします。 個人的には、この目的のためにDEAMON ToolsLiteプログラムを使用することを好みます。 彼らが言うように、誰かが他の好み、より直接的または軽量のユーティリティ、味と色を持っているかもしれません..インストール後 DAEMON Tools Lite、イメージファイルGRMSDKX_EN_DVD.isoをダブルクリックするだけで、新しい仮想CDがシステムに表示されます。

それで ダブルクリック自動実行をアクティブにして、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ユーティリティは、コンポーネントフォルダをスキャンし、新しいコンポーネントをシンボルストアに追加して、クライアントがそれらを取得できるようにします。 symstoreは、0層ストレージからシンボルを取得し、それらを2層/ 3層ストレージに配置するために使用されると言われています。
tlist.exe タスクビューア。 実行中のすべてのプロセスを一覧表示するためのユーティリティ。
umdh.exe ユーザーモードのダンプヒープユーティリティ。 選択したプロセスのヒープ(ヒープ)を分析するためのユーティリティ。 ヒープのさまざまなオプションを表示できます。
usbview.exe USBビューア。 コンピュータに接続されているUSBデバイスを表示するためのユーティリティ。
vmdemux.exe デマルチプレクサ 仮想マシン..。 1つのCOM接続に対して複数の名前付きパイプを作成します。 チャネルは、仮想マシンのさまざまなコンポーネントをデバッグするために使用されます
windbg.exe GUIユーザーモードおよびカーネルモードデバッガー。

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つのパスがあります。

  1. すでに実行中のプロセスに接続します。
  2. WinDBGを介してプロセスを起動します。

それぞれの方法には、独自の長所と短所があります。 たとえば、WinDBGを介してプログラムを実行する場合、アプリケーションをクラッシュさせる可能性のある特別なデバッグオプション(ヒープデバッグなど)がいくつかあります。 一方、デバッガーをフックするとクラッシュするプログラムもあります。 一部のアプリケーション(特にマルウェア)は、起動時にシステム内のデバッガーの存在をチェックするため、この場合、すでに実行中のプロセスに固執するのが理にかなっています。 Windows OSで実行されているサービスのデバッグがあり、起動時にいくつかのパラメーターが設定されることがあります。そのため、デバッグプロセスを簡素化するには、デバッガーを介してサービスを開始するよりも、実行中のプロセスにフックすることをお勧めします。 一部の人々は、デバッガーを介してプロセスを実行すると、パフォーマンスに深刻な影響を与えると主張しています。 つまり、両方を試して、自分に最適なものを選択してください。 何らかの理由で特定の方法を好む場合は、コメントであなたの考えを共有してください!

プロセス開始

ネットワークではなくローカルで実行されているスタンドアロンアプリケーションをデバッグしている場合は、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、サーバー= USER-PC

これで、「ファイル:リモートセッションに接続」に移動し、テキストフィールドに次のように入力することで、リモートホストから既存のデバッグセッションに接続できます。tcp:ポート= 5005、サーバー= 192.168.127.138

図12:デバッグセッションへのリモート接続

接続すると、リモートクライアントで確認を受け取ります。


サーバーが起動しました。 クライアントはこれらのコマンドラインのいずれかに接続できます
0: -リモートtcp:ポート= 5005、サーバー= USER-PC
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(!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。

これらのタイプの障害は通常、ドライバーの障害に関連しており、計算が難しい場合があります。 ただし、Windows Vista(Vistaだけでなく)の改善されたバグ追跡システムは、問題のあるファイルにつながることがよくあります。 その結果、ほとんどの人は不安定なコンピューターで必死に作業しようとするのをやめ、偏執的な規則性でドキュメントを保存し、最高のものを望んでいます。

Windowsがクラッシュする通常、いわゆる「メモリダンプ」が作成されます。 後者は無料のデバッガーで調査できます Windowsツール問題の原因にたどり着くことができるデバッグツール。 したがって、あなたがする必要があるのは:

デバッグツールを自分でダウンロードする

Windowsデバッグツールは、MicrosoftのWebサイトから直接ダウンロードできます。 このプログラムは、Windows NT4からWindows2008までのさまざまなオペレーティングシステムで動作するため、問題はありません。 はい、Windows 7 RCで安定しているとは言えませんが、私たちのテストによると、それでも動作します。 したがって、Windows 7RCで問題を診断しようとしても成功する可能性があります。

システムを構成する

クラッシュ時にコンピュータがメモリダンプを作成する必要があります。メモリダンプは後でデバッガの情報源として機能します。 したがって、ダンプを生成するようにWindowsを構成することが重要です。 オペレーティングシステムをカスタマイズするには、をクリックします 右クリックコンピューター(コンピューター)にマウスを置き、[プロパティ]([プロパティ])を選択します。 次に、[システムの詳細設定]タブをクリックし、[スタートアップとリカバリの設定]サブセクションを見つけて、[デバッグ情報の書き込み]パラメーターが[カーネルメモリダンプ]または[メモリダンプの完了]に設定されていることを確認します。

次に、[スタート]をクリックし、[すべてのプログラム]に移動し、[デバッグツール]を選択して、WinDbgを起動します。 プログラムで、[ファイル]メニューに移動し、[シンボルファイルパス...]を選択します。次に、開いたウィンドウに次の行を書き込みます。

SRV * c:\シンボル* http://msdl.microsoft.com/download/symbols

後者は、特別なデータへのパスを定義します。いわゆる「シンボル」は、デバッグツールが障害のあるファイルを特定するのに役立ちます。

行を入力したら、[OK]ボタンをクリックします。 後でデバッガーを操作するときに、この行はmsdl.microsoft.comからシンボルをダウンロードし、c:\ symbolsフォルダーに保存します。

あなたの問題を解決する

ここで、ブルースクリーンが表示された次のクラッシュと、その後のコンピューターの再起動の完了を待ちます。 次に、WinDbgを再度実行し(Vistaユーザーは管理者としてプログラムを実行する必要があります)、[ファイル]メニューをクリックし、[クラッシュダンプを開く]を選択して、ファイル\ Windows \ MEMORY.DMPを開くと、プログラムはすぐに分析を開始します。

残念ながら、WinDbgはそれが何をするかについてほとんど情報を提供しないので、プログラムがフリーズしていると思うかもしれません。 ただし、お待ちください。 たとえば、それほど強力ではないコンピュータの4GBのメモリを分析すると、時間がかかり、最大で数時間かかる場合があることを理解してください。 したがって、辛抱強く、分析は夜に任せたほうがよいでしょう。

ただし、通常、結果は数分以内に取得されます。 これは、Bugcheck Analysisエラーのアナライザーの行によって証明され、「おそらく原因:UACReplace.sys」のようなものが報告されます。 ロシア語に翻訳すると、これは問題がUACReplace.sysファイルによって引き起こされている可能性があることを意味します。 Googleなどの検索バーに入力すると、その本当の起源がわかります。 特に、インストールしたプログラムの1つに属している場合、または インストールされているドライバーその後、あなたは彼女または彼を更新しようとすることができます。 おそらくこれはあなたが抱えている問題を解決するでしょう。

WinDbgはファイルにまったく名前を付けられないか、単にWindowsDLLの1つを選択するだけであると言わなければなりません。 これが発生した場合は、ステータスバーの上にあるコマンドウィンドウをクリックして、次のコマンドを入力します。

次に、Enterキーを押します。 これにより、問題の考えられる原因に関する情報が含まれている可能性のある、より詳細なレポートが提供されます。

今回は運が悪ければ、絶望しないでください。 専門家であっても、デバッグは非常に困難です。 したがって、WinDbgを閉じて、次のクラッシュ後にアナライザーを再度実行します。 おそらくこれはあなたにいくつかのより多くの情報を与えるでしょう。 幸運を!