So überprüfen Sie die Windows-Debug-Symbole

Unterstützung für Windows Vista Service Pack 1 (SP1) am 12. Juli 2011 endet. Um weiterhin Sicherheitsupdates für Windows zu erhalten, stellen Sie sicher, dass Sie Windows Vista mit Service Pack 2 (SP2) ausführen. Weitere Informationen finden Sie auf dieser Microsoft-Webseite: Unterstützung endet für einige Versionen von Windows.

Zusammenfassung

Die Debugsymbole für Windows müssen nach dem Starten des Kernel-Debuggers überprüft (I386kd.exe | WinDbg.exe). Der Debugger kann eventuell starten und eine Eingabeaufforderung anzeigen, aber wenn die Symbole nicht korrekt sind, referenzieren zukünftige Debugging Befehle nicht die richtigen Funktionen und Variablen, dies kann zu sporadischen Ergebnissen führen. Im folgenden sind einige Red Flags und ein paar Methoden, um die Gültigkeit der Symbole vor Ort zu kontrollieren

Weitere Informationen

Es wird vorausgesetzt, dass der Kernel-Debugger ausgeführt wird und eine Memory.dmp-Datei geladen wurde oder mit einem Remotecomputer verbunden ist. Die erläuterten Befehle sind nicht vollständig dokumentiert und es werden nur Auszüge aus der Ausgabe angezeigt.

Inhalt

  • Laden des Kernel-Debuggers
  • Überprüfen die Erstellungszeit mit! Treiber
  • Überprüfung der Erstellungszeit mit Link.exe
  • Unassembling Funktion
  • Service Pack-Symbole

Laden des Kernel-Debuggers

Ein normaler Auslastung der Kernel-Debugger zeigt eine der folgenden Fragen:
KD > Einprozessorsystem

0: kd > Multiprozessorsystem
Die Meldung unten gibt an, dass die Symboldatei für die Datei Ntoskrnl.exe falsch ist. Vergewissern Sie, dass die entsprechende Multiprozessor oder Uniprozessor und HAL in der Symbolstruktur kopiert werden.


Beispiel:
Symbol search path is: C:\symbols
kd: crash dump initialized [c:\dump\memory.dmp]
could not determine the current processor, using zero
Kernel Version 1057 Free loaded @ 0x80100000
Bugcheck 0000001e : c0000005 80151d5b 00000000 00000001
*** Contents Deleted ***
16kd>

Wenn der Kernel-Debugger die Datei Memory.dmp, die Kernel-Version sowie die Anzahl der Prozessoren lädt in die ersten Zeilen angezeigt. Bestätigen Sie, dass die Anzahl der Prozessoren und den entsprechenden Kernel HAL entspricht. Symbolinformationen Treiber wird angezeigt, wie die Symbole geladen oder zurückgestellt wurden.

Beispiel-Auslastung:
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>

Beachten Sie, dass der Kernel-Debugger "Kann nicht Lesen des Headers Floppy.sys auf fc820000 - Status c0000001." Diese Meldung ist normal, da der Treiber-Header nicht im Speicher befindet.

Überprüfen die Erstellungszeit mit! Treiber

Mit der ! Treiber Befehl Treiber auflisten derzeit im Speicher geladen. Stellen Sie den Termin und die Uhrzeit der Treiber und ob sie geladen werden konnte. (Code und Datengröße Spalten im folgenden Beispiel werden die Breite des Artikels entfernt.)
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>

Beachten Sie die Erstellungszeit der Datei wird die Datei kompiliert wird. Dieses Datum ist nahe den Stempel-Datum/-Zeit Datei Winnt\System32\Drivers Unterordner mit dem Datei-Manager anzeigen.

Sie abonnieren, Microsoft Entwickler Network (MSDN) oder Windows Device Driver Kit (DDK), kann Link.exe-Tool verwendet werden, zu bestätigen, dass die Dbg-Datei dieselbe Datei ist, die bei der Kompilierung des Treibers erstellt wurde. Die "Datum Zeitstempel" im folgenden Beispiel übereinstimmt der "erstellen" des Netbios.sys in der obigen Ausgabe.

Verwenden Sie Link.exe den "Datum Zeitstempel" Dbg-Datei überprüfen:
LINK - dump - Header \symbols\sys\netbios.dbg
Microsoft (R) COFF-Binärdatei Dumper Version 3.00.5270
Copyright (C) Microsoft Corporation 1992-1995. Alle Rechte vorbehalten.

Dump-Datei Netbios.dbg
4944-Signatur
0-flags
14C Computer (i386)
306 Merkmale
2FAAE94F Zeitstempel fr Mai 05 23:13:19 1995
8D0B Image-Prüfsumme

10000 Base Bild

Größe des Bildes 70A0
** Inhalt gelöscht **

Wenn die ! Treiber Befehl erzeugt Zeilen, die wie folgt aussehen, einen Tisch in dem Speicherabbild ist beschädigt. Weitere Analysen der Sicherung möglicherweise nicht möglich.
Nicht DosHeader 0583002a - Status 00000000 lesen
Nicht DosHeader 0587002a - Status 00000000 lesen
Nicht DosHeader 0588002a - Status 00000000 lesen
Nicht DosHeader 058a002a - Status 00000000 lesen
Nicht DosHeader 058c002a - Status 00000000 lesen

Unassembling Funktion

Die Symboldateien aktivieren den Kernel-Debugger auf Funktionen und globalen Variablen nach Namen verweisen. Vor Ort überprüfen einige nicht zusammengebauten Funktionen um sicherzustellen, dass sie richtige Aussehen. Viele Funktionen sind Compiler optimiert und entsprechen nicht notwendigerweise unten. Compiler optimiert Funktionen werden durch die FPO in Klammern in den Namen der Funktion identifiziert.


Funktionen beginnen normalerweise mit entweder Ebp"Push" oder "Mov Eax fs [000000000]." Grundlegende Kenntnisse der Sprache und Erfahrung ermöglicht diese Funktionen erkennen.
  • Auflisten der geladenen Module
    X *!
  • Symbole für ein bestimmtes Modul (z. B. Ntoskrnl.exe) aufgeführt.
    x nt! *
  • Wählen Sie eine Funktion nicht Compiler optimiert, abgeh‰ngte.
    u NT! _NtUnlockFile

Gute Symbole

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>

Unassembly der Funktion sieht etwa wie oben; Allerdings ist die Unassembly ändern. Die Unassembly ordnungsgemäße sieht, können Sie davon ausgehen, dass die Symbole für dieses Modul ordnungsgemäß geladen haben.


Die folgenden Unassembly beginnt mit "Jnz NT! _NTUnlockFile + 0 x 22." Natürlich würde der Anfang einer Funktion mit einem Sprung Anweisung nicht gestartet. Überprüfen Sie erneut die Symbolstruktur.

Falsche Symbole

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]

Service Pack-Symbole

Manchmal ist es schwierig, die Symbole mit einer bestimmten Installation gibt. Irgendwann in Zeit konnte Dienst hinzugefügt wurden, die erforderlichen Dateien von der Windows Installations-CD, die Dateien kopiert, die mit einem Servicepack aktualisiert wurden. Achten Sie darauf, dass Sie erneut das Servicepack und alle Laufwerke von Drittanbietern Support nach Ändern der System-Setup die Dateien von der Windows Installations-CD kopiert. Die Symbole in der Reihenfolge der Installation anzuwenden.

WEITERE INFORMATIONEN

Kernel Debuggen How To Reihe von Artikeln suchen auf das Schlüsselwort: Debugref.

WinDbg 2.0.x Symbol Techniken

In Debugger-Version 2.0.x und Microsoft Debuggers sind zusätzliche Symbol Überprüfungsschritte, die verwendet werden können. Weitere Informationen finden Sie auf der folgenden Microsoft-Website:
Eigenschaften

Artikelnummer: 148660 – Letzte Überarbeitung: 10.01.2017 – Revision: 1

Feedback