Support för Windows Vista Service Pack 1 (SP1) upphör den 12 juli 2011. Om du vill fortsätta att få säkerhetsuppdateringar för Windows, kontrollera att du kör Windows Vista med Service Pack 2 (SP2). Mer information finns i Microsoft-webbsida: stöd för slutdatum för vissa versioner av Windows.

Sammanfattning

Windows debug symbolerna måste verifieras när du har startat en kernel-felsökare (I386kd.exe | WinDbg.exe). felsökaren kan ladda och presentera en fråga, men om symbolerna är felaktiga kommandon för framtida felsökning refererar inte till rätt funktioner och variabler, vilket leder till sporadisk resultat. Nedan visas några röda flaggor och några metoder för stickprov giltigheten av symboler.

Mer information

I denna artikel förutsätts att kernel-felsökare är igång och har laddat en Memory.dmp-fil eller är ansluten till en fjärrdator. Kommandon som visas inte är väl dokumenterade och endast utdrag från utdata visas.

Innehåll

  • Läsa in en Kernel-felsökare

  • Kontrollera Skapandetid med! drivrutiner

  • Om du använder Link.exe för att kontrollera Skapandetid

  • Unassembling en funktion

  • Service Pack-symboler

Läsa in en Kernel-felsökare

En normal belastning av kernelfelsökaren visas ett av följande frågor:

Kd > Uniprocessor System 0: kd > System med flera processorerUppmaningen visas nedan anger att symbolfilen för filen Ntoskrnl.exe är felaktig. Kontrollera att rätt multiprocessor eller en kernel- och HAL kopieras till trädet symbol. Exempel:Symbol search path is: C:\symbolskd: crash dump initialized [c:\dump\memory.dmp]could not determine the current processor, using zeroKernel Version 1057 Free loaded @ 0x80100000Bugcheck 0000001e : c0000005 80151d5b 00000000 00000001*** Contents Deleted ***16kd> När kernelfelsökaren laddar filen Memory.dmp Kernel-Version samt antalet processorer visas i de första raderna. Kontrollera att antalet processorer motsvarar lämplig kernel- och HAL. Symbol för drivrutinsinformation visas som antingen symboler laddas eller uppskjutna. Prov belastning:Symbol search path is: C:\symbolskd: crash dump initialized [c:\dump\memory.dmp]Kernel Version 1057 Free loaded @ 0x80100000Bugcheck 0000001e : c0000005 80151d5b 00000000 00000001re-loading all kernel symbolsKD: unloading symbols for "ntoskrnl.exe"KD: deferring symbol load for "ntoskrnl.exe" at 80100000KD: 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 fc810000KD: deferring symbol load for "diskdump.sys" at fc800000KD: deferring symbol load for "hal.dll" at 80400000KD: deferring symbol load for "atapi.sys" at 80010000KD: deferring symbol load for "SCSIPORT.SYS" at 80013000KD: deferring symbol load for "Atdisk.sys" at 80001000KD: deferring symbol load for "Scsidisk.sys" at 8001b000KD: deferring symbol load for "Fastfat.sys" at 80372000Unable to read image header for Floppy.SYS at fc820000 - status c0000001*** Contents Deleted ***KD: deferring symbol load for "srv.sys" at fc9e0000KD: deferring symbol load for "ntdll.dll" at 77f80000finished re-loading all kernel symbolsNT!_PspUnhandledExceptionInSystemThread+0x18:80131ff8 b801000000 mov eax,0x1kd> Observera att kernelfelsökaren var ”det går inte att läsa bilden huvud för Floppy.sys vid fc820000 - status c0000001”. Det här meddelandet är normalt eftersom drivrutinen huvudet inte är för närvarande i minnet.

Kontrollera Skapandetid med! drivrutiner

Använd den ! drivrutiner kommando för att lista drivrutinerna som för närvarande är inläst i minnet. Att anteckna datum och tider för drivrutinerna och huruvida de kan läsas. (Kod och datastorlek kolumnerna i följande exempel tas bort om du vill anpassa bredden på artikeln.)kd> !driversBase Code Size Data Size Driver Name Creation Time80100000 Ntoskrnl.exe Fri May 26 18:18:36 199580400000 Hal.dll Thu May 11 13:54:18 199580010000 Atapi.sys Tue May 23 21:01:41 199580013000 Scsiport.sys Fri May 05 23:11:06 199580001000 Atdisk.sys Fri May 05 23:10:40 19958001b000 Scsidisk.sys Fri May 05 23:11:01 199580372000 Fastfat.sys Mon May 22 23:57:13 1995fc820000 Floppy.sys Header Paged Outfc830000 Scsicdrm.sys Wed May 10 21:57:03 1995fc840000 Fs_Rec.sys Header Paged Outfc850000 Null.sys Header Paged Outfc860000 Beep.sys Header Paged Outfc870000 I8042prt.sys Fri May 05 23:10:42 1995fc880000 Mouclass.sys Fri May 05 23:10:45 1995fc890000 Kbdclass.sys Fri May 05 23:10:44 1995fc8b0000 Videoprt.sys Fri May 05 23:10:05 1995fc8a0000 S3.sys Fri May 19 21:18:06 1995fc8c0000 Vga.sys Fri May 05 23:10:10 1995fc8d0000 Msfs.sys Fri May 05 23:11:57 1995fc8e0000 Npfs.sys Fri May 05 23:11:40 1995fc900000 Ndis.sys Mon May 22 20:23:18 1995fc8f0000 El59x.sys Fri Feb 10 16:18:09 1995fc940000 Tdi.sys Fri May 05 23:13:09 1995fc920000 Nbf.sys Mon May 08 15:00:47 1995fc950000 Netbios.sys Fri May 05 23:13:19 1995fc960000 Parport.sys Header Paged Outfc970000 Parallel.sys Header Paged Outfc980000 Serial.sys Fri May 05 23:11:20 1995fc990000 Afd.sys Header Paged Outfc9a0000 Rdr.sys Wed May 17 17:18:16 1995fc9e0000 Srv.sys Wed May 24 21:56:59 1995TOTAL: 1ab460 (1709 kb) 3b7c0 ( 237 kb) ( 0 kb 0 kb)kd> Notera tiden för skapande av filen, vilket är det datum som filen har kompilerats. Detta datum är nära Date\Time stämpel på själva filen när du visar undermappen Winnt\System32\Drivers med hjälp av Filhanteraren. Om du prenumererar på Microsoft Developers Network (MSDN) eller Windows Device Driver Kit (DDK), användas verktyget Link.exe för att bekräfta att filen Dbg är samma fil som skapades när drivrutinen kompilerades. ”Datum tidsstämpeln” i exemplet nedan matchar ”skapa tiden” för Netbios.sys i ovanstående utdata. Använd Link.exe för att kontrollera ”datum tidsstämpeln” av Dbg-fil:

LÄNKA - dump - huvuden \symbols\sys\netbios.dbgMicrosoft (R) COFF-binärfilen Dumper Version 3.00.5270 Copyright (C) Microsoft Corp 1992-1995. Alla rättigheter förbehålles. Dumpning av filen Netbios.dbg

4944 signatur 0 flags 14C dator (i386) 306 egenskaper2FAAE94F tid datumstämpel fre maj 05 23:13:19 1995

8D0B kontrollsumma för avbildning 10000 bas av 70A0 storlek på bild** Innehåll Borttaget ** om den ! drivrutiner kommandot ger alla rader som ser ut som följande, en viktig tabell i dumpen är skadad. Ytterligare analys av dumpning får inte vara möjligt.

Det gick inte att läsa DosHeader i 0583002a - status 00000000 går inte att läsa DosHeader i 0587002a - status 00000000 går inte att läsa DosHeader i 0588002a - status 00000000 går inte att läsa DosHeader i 058a002a - status 00000000 går inte att läsa DosHeader i 058c002a - status 00000000

Unassembling en funktion

Symbolfilerna aktivera kernelfelsökaren vill referera funktioner och globala variabler efter namnet. Plats kontrollera ett par omonterad funktioner så att de ser korrekt ut. Många funktioner är kompilatorn optimerad och inte nödvändigtvis överensstämmer med exemplen nedan. Kompilatorn optimerade funktioner identifieras av FPO inom parentes i funktionsnamnet. Funktioner som normalt börjar med antingen ”push ebp” eller ”mov eax, fs [000000000]”. Grundläggande kunskap om maskinspråk och erfarenhet kommer kunna identifiera dessa funktioner.

  • Lista över inlästa moduler x *!

  • Visa symboler för en viss modul (till exempel Ntoskrnl.exe). x-nt! *

  • Välj en funktion till unassemble dvs inte kompilatorn optimerad. u NT! _NtUnlockFile

Bra symboler

kd> u NT!_NtUnlockFileu NT!_NtUnlockFileNT!_NtUnlockFile:80156bd8 64a100000000     mov     eax,fs:[00000000]80156bde 55               push    ebp80156bdf 8bec             mov     ebp,esp80156be1 6aff             push    0xff80156be3 68200d1080       push    0x80100d2080156be8 68304f1380       push    0x80134f3080156bed 50               push    eax80156bee 64892500000000   mov     fs:[00000000],espkd> 

Unassembly för funktionen bör likna texten ovan. i unassembly kan dock ändras. Om unassembly ser rätt anta du att symbolerna har lästs in korrekt för denna modul. Följande unassembly som börjar med ”jnz NT! _NTUnlockFile + 0x22”. Självklart börjar i början av en funktion inte med en kod för linjehopp instruktion. Kontrollera symbolen trädet igen.

Felaktig symboler

kd> u NT!_NTUnlockFileu NT!_NTUnlockFileNT!_NtUnlockFile:801574a4 7520             jnz     NT!_NtUnlockFile+0x22 (801574c6)801574a6 6a00             push    0x0801574a8 8d45dc           lea     eax,[ebp-0x24]801574ab 50               push    eax801574ac 53               push    ebx801574ad ff356c361480     push    dword ptr [NT!_CcNoDelay+0x4 (8014366c)]801574b3 6a01             push    0x1801574b5 ff7508           push    dword ptr [ebp+0x8] 

Service Pack-symboler

Det finns tillfällen då det är svårt att matcha symboler med en viss installation. Förr i tiden kan en tjänst ha lagts som krävs för kopiering av filer från Windows-installationen CD kopieras över filer som har uppdaterats med ett service pack. Glöm inte att tillämpa service pack och varje tredje parts stöd diskar när du har ändrat systeminställningarna som kopierar filer från Windows-installations-CD. Symbolerna skall tillämpas i ordningen som installationen.

YTTERLIGARE INFORMATION

Du hittar Kernel Debug How To-serie av artiklar, söka på nyckelordet: debugref. WinDbg 2.0.x Symbol tekniker I debugger version 2.0.x eller senare av Microsoft-Debuggers finns ytterligare symbol verifieringssteg som kan användas. Mer information finns på följande Microsoft-webbplats:

Drivrutiner Development Kit

Behöver du mer hjälp?

Utöka dina kunskaper

UTFORSKA UTBILDNING >

Få nya funktioner först

ANSLUT TILL MICROSOFT INSIDERS >

Hade du nytta av den här informationen?

Hur nöjd är du med språkkvaliteten?
Vad påverkade din upplevelse?

Tack för din feedback!

×