[NT]Windows NT デバッグ シンボルの確認方法

文書翻訳 文書翻訳
文書番号: 148660 - 対象製品
この記事は、以前は次の ID で公開されていました: JP148660
すべて展開する | すべて折りたたむ

目次

概要

カーネル デバッグ (I386KD.EXE | WINDBG.EXE) を起動した後で、Windows NT デバッグ シンボルを確認する必要があります。デバッグはプロンプトをロードして表示しますが、シンボルが不適切だと、その後のデバッギング コマンドは、適切な機能と変数を参照しないため、散発的な結果が導かれません。下記のリストは、シンボルの正確性をチェックするための 2、3 個の赤いフラッグと何組かの方法です。

詳細

この資料はカーネル デバッグが MEMORY.DMP ファイルを実行していて MEMORY.DMP ファイルをロードしている、またはリモート マシンに接続されていると仮定しています。表示されたコマンドは、完全に文書化されていませんが、出力からの影響だけは表示されています。

資料の内容

  • カーネル デバッグをロードする
  • !drivers を使用して作成時間をチェックする
  • 作成時間をチェックするために LINK.EXE を使用する
  • ファンクションを逆アセンブルする
  • サービス パックのシンボル

カーネル デバッグをロードする

カーネル デバッグの通常のロードは、以下のプロンプトのうち 1 つを表示します。
     kd>      Uniprocessor System
  0: kd>      Multiprocessor System
下記で表示されたプロンプトは、NTOSKRNL.EXE のシンボル ファイルが不正であることを示しています。適切なマルチプロセッサまたはユニプロセッサのカーネルや HAL が、3 つのシンボルにコピーされていることを確認してください。
  例:
  
  Symbol search path is: C:\symbols
  kd: crash dump initialized [c:\dump\memory.dmp]
  cound not determine the current processor, using zero
  Kernel Version 1057 Free loaded @ 0x80100000
  Bugcheck 0000001e : c0000005 80151d5b 00000000 00000001
  *** Contents Deleted ***
  16kd>
カーネル デバッグが MEMORY.DMP ファイルをロードするとき、最初の数行にプロセッサ コートとカーネル バージョンが表示されます。プロセッサ コートが適切なカーネルと HAL に対応していることを確認してください。シンボルがロードされる、または延期されると、ドライブ シンボル情報が表示されます。
  ロードのサンプル:
  
  Symbol search path is: C:\symbols
  kd: crash dump initialized [c:\dump\memory.dmp]
  Kernel Version 1057 Free loaded @ 0x80100000
  Bugcheck 0000001e : c0000005 80151d5b 00000000 00000001
  re-loading all kernel symbols
  KD: unloading symbols for "ntoskrnl.exe"
  KD: deferring symbol load for "ntoskrnl.exe" at 80100000
  KD: Loaded (2248) fpo entries for image (ntoskrnl.exe)
  KD: "ntoskrnl.exe" loaded 4074 symbols (80100000-801bbb80)
  KD: loaded symbols for "ntoskrnl.exe"
  KD: deferring symbol load for "atapi.sys" at fc810000
  KD: deferring symbol load for "diskdump.sys" at fc800000
  KD: deferring symbol load for "hal.dll" at 80400000
  KD: deferring symbol load for "atapi.sys" at 80010000
  KD: deferring symbol load for "SCSIPORT.SYS" at 80013000
  KD: deferring symbol load for "Atdisk.sys" at 80001000
  KD: deferring symbol load for "Scsidisk.sys" at 8001b000
  KD: deferring symbol load for "Fastfat.sys" at 80372000
  Unable to read image header for Floppy.SYS at fc820000 - status c0000001
  *** Contents Deleted ***
  KD: deferring symbol load for "srv.sys" at fc9e0000
  KD: deferring symbol load for "ntdll.dll" at 77f80000
  finished re-loading all kernel symbols
  NT!_PspUnhandledExceptionInSystemThread+0x18:
  80131ff8 b801000000       mov     eax,0x1
  kd>
カーネル デバッグが "Unable to read image header for Floppy.SYS at fc820000 - status c0000001." ( fc820000 - status c0000001 で Floppy.SYS の画像ヘッダを読み込めません。) となりました。現在、特定のドライブ ヘッダがメモリ内にないため、このメッセージが表示されています。

!drivers を使用して作成時間をチェックする

!drivers コマンドを使用して、メモリ内に現在ロードされているドライブを一覧にします。ドライブの日付と時間、ロードされるかどうかのメモを作成してください。(コード サイズとデータ サイズの列は、この資料の幅に合わせて変えられています。)
  kd> !drivers
  Base       Code Size Data Size  Driver Name        Creation Time
  80100000                       ntoskrnl.exe   Fri May 26 18:18:36 1995
  80400000                            hal.dll   Thu May 11 13:54:18 1995
  80010000                          atapi.sys   Tue May 23 21:01:41 1995
  80013000                       SCSIPORT.SYS   Fri May 05 23:11:06 1995
  80001000                         Atdisk.sys   Fri May 05 23:10:40 1995
  8001b000                       Scsidisk.sys   Fri May 05 23:11:01 1995
  80372000                        Fastfat.sys   Mon May 22 23:57:13 1995
  fc820000                         Floppy.SYS   Header Paged Out
  fc830000                       Scsicdrm.SYS   Wed May 10 21:57:03 1995
  fc840000                         Fs_Rec.SYS   Header Paged Out
  fc850000                           Null.SYS   Header Paged Out
  fc860000                           Beep.SYS   Header Paged Out
  fc870000                       i8042prt.SYS   Fri May 05 23:10:42 1995
  fc880000                       Mouclass.SYS   Fri May 05 23:10:45 1995
  fc890000                       Kbdclass.SYS   Fri May 05 23:10:44 1995
  fc8b0000                       VIDEOPRT.SYS   Fri May 05 23:10:05 1995
  fc8a0000                             s3.SYS   Fri May 19 21:18:06 1995
  fc8c0000                            vga.sys   Fri May 05 23:10:10 1995
  fc8d0000                           Msfs.SYS   Fri May 05 23:11:57 1995
  fc8e0000                           Npfs.SYS   Fri May 05 23:11:40 1995
  fc900000                           NDIS.SYS   Mon May 22 20:23:18 1995
  fc8f0000                          el59x.sys   Fri Feb 10 16:18:09 1995
  fc940000                            TDI.SYS   Fri May 05 23:13:09 1995
  fc920000                            nbf.sys   Mon May 08 15:00:47 1995
  fc950000                        netbios.sys   Fri May 05 23:13:19 1995
  fc960000                        Parport.SYS   Header Paged Out
  fc970000                       Parallel.SYS   Header Paged Out
  fc980000                         Serial.SYS   Fri May 05 23:11:20 1995
  fc990000                            afd.sys   Header Paged Out
  fc9a0000                            rdr.sys   Wed May 17 17:18:16 1995
  fc9e0000                            srv.sys   Wed May 24 21:56:59 1995
  TOTAL:   1ab460 (1709 kb)  3b7c0 ( 237 kb) (    0 kb     0 kb)
  kd>
ファイルがコンパイルされた日付のファイルの作成時間に気を付けてください。ファイル マネージャを使用して WINNT\SYSTEM32\DRIVERS サブディレクトリを表示した時、その日付は、実際のファイル上の Date\Time Stamp には公開されていません。

Microsoft Developers Network (MSDN) を購読している、または Windows NT DDK (デバイス ドライブ キット) を持っている場合、DBG ファイルがドライブのコンパイル時に作成されたファイルと同じファイルであることを確認するために、LINK.EXE ユーティリティを使用できます。下記の例の "time date stamp" は、上記の netbios.sys の "作成時間" と同じになります。
  1. LINK -dump -headers \symbols\sys\netbios.dbg
     Microsoft (R) COFF Binary File Dumper Version 3.00.5270
     Copyright (C) Microsoft Corp 1992-1995. All rights reserved.
     
     Dump of file netbios.dbg
         4944 signature
            0 flags
          14C machine (i386)
          306 characteristics
     2FAAE94F time date stamp Fri May 05 23:13:19 1995
         8D0B checksum of image
        10000 base of image
        70A0 size of image
     ** Contents Deleted **
!drivers コマンドは、ダンプ内の重要なテーブルが破壊されたというのではなく、以下のようなラインを作成するものです。ダンプをさらに分析することは不可能な場合があります。
Unable to read DosHeader at 0583002a - status 00000000
Unable to read DosHeader at 0587002a - status 00000000
Unable to read DosHeader at 0588002a - status 00000000
Unable to read DosHeader at 058a002a - status 00000000
Unable to read DosHeader at 058c002a - status 00000000

逆アセンブル

シンボル ファイルによって、カーネル デバッグは、機能と名前による包括的な変数に参照事項をつけられます。スポットは、それらの機能が適切に見えるかを確認するために、逆アセンブル機能の組み合わせをチェックします。多くの機能は、最適なコンパイルであり、下記の例に合わせる必要はありません。最適なコンパイル機能は、機能名のかっこ内の FPO によって識別できます。

通常、機能は "push ebp" または "mov eax, fs[000000000]" で始まります。マシン語の基本的な知識と経験があれば、以下を認識できます。
  1. ロード モジュールを一覧にします。
         x *!
    
  2. ntoskrnl.exe など、特定のモジュールのシンボルを一覧にします。
         x nt!*
    
  3. 最適なコンパイルではないファンクションを逆アセンブルするために選択する
     u NT!_NtUnlockFile

正しいシンボルの例

  kd> u NT!_NtUnlockFile
  u NT!_NtUnlockFile
  NT!_NtUnlockFile:
  80156bd8 64a100000000     mov     eax,fs:[00000000]
  80156bde 55               push    ebp
  80156bdf 8bec             mov     ebp,esp
  80156be1 6aff             push    0xff
  80156be3 68200d1080       push    0x80100d20
  80156be8 68304f1380       push    0x80134f30
  80156bed 50               push    eax
  80156bee 64892500000000   mov     fs:[00000000],esp
  kd>
逆アセンブルは上記のテキストに似ています。しかし、逆アセンブルは変更しだいです。逆アセンブルが適切であれば、そのモジュールのシンボルは適切にロードされたと仮定できます。

以下の逆アセンブルは "jnz NT!_NTUnlockFile+0x22." で始まるものです。明らかに、機能は jump 命令コードでは始まっていません。もう一度シンボル ツリーを確認してください。

正しくないシンボルの例

  kd> u NT!_NTUnlockFile
  u NT!_NTUnlockFile
  NT!_NtUnlockFile:
  801574a4 7520             jnz     NT!_NtUnlockFile+0x22 (801574c6)
  801574a6 6a00             push    0x0
  801574a8 8d45dc           lea     eax,[ebp-0x24]
  801574ab 50               push    eax
  801574ac 53               push    ebx
  801574ad ff356c361480     push    dword ptr [NT!_CcNoDelay+0x4 (8014366c)]
  801574b3 6a01             push    0x1
  801574b5 ff7508           push    dword ptr [ebp+0x8]

サービス パック シンボル

シンボルを特定のインストールに合わせることが困難な場合があります。ある時点では、Windows NT インストール用 CD-ROM からのファイルのコピーに必要なサービスや、サービス パックを使って更新したファイルにコピーされたサービスを追加できます。Windows NT インストール用 CD-ROM からファイルをコピーするシステムの設定を変更した後は、必ずサービス パックとサード パーティ製のサポート ディスクを再適用してください。シンボルはインストール時と同じ順序で適用される必要があります。

追加情報

カーネル デバッグの方法に関する一連の資料は、debugref と入力して検索を行ってください。

関連情報

この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 148660 (最終更新日 1997-12-05) をもとに作成したものです。

プロパティ

文書番号: 148660 - 最終更新日: 2004年1月28日 - リビジョン: 3.0
この資料は以下の製品について記述したものです。
  • Microsoft Windows NT Workstation 3.5
  • Microsoft Windows NT Workstation 3.51
  • Microsoft Windows NT Server 3.5
  • Microsoft Windows NT Server 3.51
  • Microsoft Windows 2000 Professional Edition
  • Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Advanced Server
キーワード:?
kbhowto debugref KB148660
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com