hoe windbg bepaalt welke OS-symbolen moeten worden gedownload voor een dumpbestand

Wanneer ik een analyse van dumpbestanden maak, stel ik het symboolpad zo in dat deze naar Microsoft Symbol Server verwijst. Hoe weet windbg dat het dumpbestand is gegenereerd onder welk besturingssysteem en hoe downloadt het de juiste symbolen voor dat besturingssysteem?

0

1 antwoord

To match symbols to binary, WinDbg looks at the thing called Debug Directories. Debug Directories are sections in PE modules (which is a file format used by Windows for all types of executables). Debug Directories simply contain links to types of debug information. If you type command in cmd window link /dump /headers , it will print out something like this:

...
Debug Directories

    Time Type       Size      RVA  Pointer
-------- ------ -------- -------- --------
4CC78FB1 cv           22 00102588   101988    Format: RSDS, {30976E0B-FBF7-45EF-8608-99932F2B791F}, 2, ntdll.pdb
4CC78FB1 (   A)        4 00102584   101984    BB03197E

...

Dit is uitvoer voor ntdll.dll. U kunt zien dat de foutopsporingsinformatie voor CV (voor CodeView) zich bevindt in ntdll.pdb en de GUID van die VOB moet overeenkomen met die in de link. Die GUID wordt willekeurig gegenereerd voor elke module tijdens de build-tijd.

Command ! Lmi in WinDbg zal deze informatie ook in een andere indeling dumpen.

Wat WinDbg doet bij het laden van symbolen van de symbolenserver, stuurt het verzoek naar de symbolenserver om een ​​bestand met de naam 'ntdll.pdb' met bijbehorende GUID te krijgen.

2
toegevoegd
Elke PE-module heeft zijn eigen symboolbestand. Er bestaat niet zoiets als "symbolen voor OS", omdat OS bestaat uit een combinatie van versies van verschillende servicepacks, patches, hotfixes, privé-binaries, enz.
toegevoegd de auteur seva titov, de bron
Nogmaals, er zijn geen "OS-symbolen", er zijn symbolen voor een specifieke PE-module. Dump bevat een lijst met modules die momenteel zijn toegewezen aan de procesadresruimte. Er zijn verschillende versies van kernel32.dll - voor verschillende processorarchitecturen van het besturingssysteem zijn er meer versies met verschillende OS-patches. Wanneer debugger symbolen voor kernel32.dll moet oplossen, kijkt het naar de module-informatiestructuur, die wordt gemaakt door de loader op het moment dat de module oorspronkelijk in het proces werd geladen. Deze informatie bevat enkele gedeelten van de PE-afbeelding, inclusief de foutopsporingsdirectory.
toegevoegd de auteur seva titov, de bron
Bedoel je dat deze info deel uitmaakt van PE-modules die zijn ingebed in vergaderingen? Wanneer ik een toepassing maak, kan ik deze via verschillende besturingssystemen met verschillende besturingssystemen uitvoeren. Ik ben verward over hoe deze info opgeslagen in PE-module kan worden gebruikt wanneer de toepassing zelf op verschillende besturingssystemen draait.
toegevoegd de auteur Silverlight Student, de bron
Laten we zeggen dat de assembly van de toepassing is gecompileerd op Vista. Ik genereer er een dump voor op Windows 7 en een andere voor Windows Server 2008. In dit geval heeft de PE-module een ID voor Vista, correct? Hoe de twee dump in dit geval symbolen voor Windows 7 en 2008 krijgen?
toegevoegd de auteur Silverlight Student, de bron