Wie WinDbg verwenden, um die Crash-Dump für VC ++ Anwendung zu analysieren?
-
06-09-2019 - |
Frage
Wie verwende ich WinDbg für eine Abbilddatei zu analysieren?
Lösung
Hier sind einige allgemeine Schritte, die Sie auf Ihrem Weg bekommen:
Zunächst müssen Sie Ihre Compiler-Einstellungen so ändern, dass es PDB-Dateien erstellt, auch für Release-Builds. Spätere Versionen der Visual C ++ Compiler dies standardmäßig tun, aber in vielen Versionen von Visual C ++ müssen Sie tun dies selbst. Programm erstellen Datenbank-Dateien und hält dann ein Archiv der Dateien zusammen mit jedem Build Ihrer Anwendung. Es ist wichtig, dass jeder Build Ihrer Anwendungen einen eigenen Satz von PDBs hat. Sie können nicht nur die gleichen, die wiederverwendet werden Sie mit Build 10 zu untersuchen, die Deponien von Build 15, beispielsweise erzeugt gemacht. Über die gesamte Lebensdauer des Projekts, werden Sie mit einer Tonne PDBs am Ende, so darauf vorbereitet sein.
Als nächstes müssen Sie in der Lage sein, die genaue Version der Anwendung zu identifizieren, die die Speicher-Abbild-Datei generiert. Wenn Sie Ihre eigene Minidumps schaffen (durch Aufruf von MiniDumpWriteDump () zum Beispiel ), wahrscheinlich der einfachste Weg, dies zu tun, ist einfach Teil des Dateinamens des MiniDump die vollständige Versionsnummer Ihrer Anwendung zu machen. Sie werden eine vernünftige Version Nummerierungsschema anstelle für diese arbeiten haben müssen. In meinem Geschäft, erhöhen wir die Build-Nummer in allen Filialen von einem jedes Mal, wenn der Autobuilder ein Build erstellt.
Nun, da Sie die Dump-Datei vom Kunden erhalten haben, wissen Sie die genaue Version der Anwendung, die den Dump erstellt, und Sie haben die PDB-Dateien für diesen Build gefunden.
Nun müssen Sie gehen durch Ihre Geschichte Quellcodeverwaltung und finden Sie den Quellcode für diese genaue Version der Software. Der beste Weg, dies zu tun ist ‚Labels‘, um Ihre Zweige jedes Mal, wenn Sie einen Build machen anzuwenden. Legen Sie den Wert des Labels auf die genaue Versionsnummer, und es wird einfach in der Geschichte zu finden.
Sie sind fast fertig WinDbg / Visual C ++ zu feuern:
- Holen Sie sich den kompletten Quellbaum für diese Version der Anwendung. Legen Sie es in einem separaten Ort auf Ihrer Festplatte, sagen
c:\app_build_1.0.100
für Anwendungsversion 1.0 build # 100. - Lernen Sie die Binärdateien für die genaue Version der Anwendung und legt sie irgendwo auf der Festplatte. Es könnte am einfachsten einfach sein, diese Version der Anwendung zu installieren, um die Binaries zu erhalten.
- Legen Sie die PDB-Dateien in der gleichen Position wie die Binärdateien in Schritt 2.
Jetzt haben Sie zwei Möglichkeiten für die Dump-Datei anzeigen. Sie können Visual Studio oder WinDbg verwenden. Visual Studio ist einfacher, aber WinDbg ist viel mächtiger. Die meiste Zeit die Funktionalität in Visual Studio ausreichen.
Visual Studio zu verwenden, alles, was Sie tun müssen, ist die Speicher-Abbild-Datei zu öffnen, wie es ein Projekt ist. Nach dem Öffnen „run“ die Dump-Datei ( F5 Standardeinstellung) und wenn alle Pfade korrekt eingestellt sind wird es Ihnen Recht auf den Code zu nehmen, die abgestürzt ist, geben Sie einen Call-Stack, etc.
So verwenden Sie WinDbg, müssen Sie durch ein paar Reifen springen:
- Starten Sie WinDbg
- Öffnen Sie die Dump-Datei. ( Strg + D Standardeinstellung)
- WinDbg per eMail die richtigen Microsoft-Symboldateien zu gehen zu bekommen. Typ
.symfix
. Dies kann einige Zeit in Anspruch nehmen, da es eine Tonne Material ziehen wird nach unten aus dem Internet. - Tell WinDbg wobei die Symbole (PDB-Dateien) sind. Typ
.sympath+ c:\pdblocation
, Ersetzen, wo Sie die PDB-Dateien für den Pfad setzen. Stellen Sie sicher, dass Sie auf das Pluszeichen bekommen dort ohne Leerzeichen zwischen.sympath
und dem+
Zeichen oder sonst werden Sie vermasseln Schritt 3. - Sagen Sie WinDbg, wo der Quellcode ist. Geben Sie
.srcpath c:\app_build_1.0.100
den Pfad Ersetzen, wo Sie Code aus der Quellcodeverwaltung bekam für diese Version der Software. - Tell WinDbg die Dump-Datei zu analysieren. Geben Sie
!analyze -v
Nach einigen Augenblicken, wenn alles richtig konfiguriert ist, WinDbg werden Sie sich an den Ort Ihrer Absturz nehmen. An dieser Stelle haben Sie eine Million Möglichkeiten zum Graben tief in dem Speicherraum der Anwendung, der Zustand der kritischen Abschnitte, Fenster, etc. Aber das ist Weg über den Rahmen dieses Beitrags.
Viel Glück!
Andere Tipps
(siehe "Dump" Abschnitte unten)
Grund Tutorials und Demonstrationen der Verwendung von WinDbg
- Installieren und Konfigurieren von WinDbg (Windows Debug tools)
- Mike Taulty - Ein Wort für WinDBG
- WinDbg Tutorials
- Windows-Debuggers: Teil 1: WinDbg Tutorial
Verschiedene Möglichkeiten auf "Start" / Attach WinDBG
- Start Debugging mit WinDbg (beinhaltet wie eine .msi debuggen)
- Wie man einen Windows-Dienst debuggen
- Einrichten von Windows-Debugging
Workspaces
Zu verstehen, wie Workspaces arbeiten ...
- Pimp up your Debugger: einen benutzerdefinierten Arbeitsbereich für windbg Debuggen Erstellen
- Aufdecken Wie Workspaces Arbeit in WinDbg
Cmdtree
A „cmdtree“ ermöglicht es Ihnen, ein „Menü“ von Debuggerkommandos für die einfachen Zugriff zu definieren, um häufig verwendeten Befehle, ohne die lapidaren Befehlsnamen merken zu müssen.
Sie müssen alle Befehlsdefinitionen in die gleiche cmdtree Textdatei nicht setzen .... Sie halten sie mehrere diejenigen trennen und laden, wenn Sie wollen (sie dann ihr eigenes Fenster bekommen).
- Erstaunlicher Helfer .cmdtree
- Wie mache ich ein cmdtree Fenster Dock beim Start in WinDBG
- macht es leichter zu debuggen .net-Dumps in windbg mit .cmdtree
- Microshaoft Cmdtree
- Sonderkommando-Befehle ausführen, von einer Kundenspezifische Bedienoberfläche mit .cmdtree
Startskript
Sie können die Option -c in der Befehlszeile verwenden, um automatisch einen WinDBG Skript ausgeführt, wenn Sie WinDBG starten.
Gibt Gelegenheit einzuschalten DML (Debugger Markup Language) Modus, laden bestimmte Erweiterungen, setzen .NET Ausnahme Stützpunkte, setzen Kernel-Flags (zB bei der Kernel-Debugging Sie könnten die DbgPrint Maske ändern müssen, so finden Tracing Sie Informationen ... .ED nt! Kd_DEFAULT_Mask 0xffffffff), Last cmdtrees etc.
Ein Beispiel Script:
$$ Include a directory to search for extensions
$$ (point to a source controlled or UNC common directory so that all developers get access)
.extpath+"c:\svn\DevTools\WinDBG\Extensions"
$$ When debugging a driver written with the Windows Driver Framework/KMDF
$$ load this extension that comes from the WinDDK.
!load C:\WinDDK\7600.16385.1\bin\x86\wdfkd.dll
!wdftmffile C:\WinDDK\7600.16385.1\tools\tracing\i386\wdf01009.tmf
$$ load some extensions
.load msec.dll
.load byakugan.dll
.load odbgext.dll
.load sosex
.load psscor4
$$ Make commands that support DML (Debugger Markup Language) use it
.prefer_dml 1
.dml_start
$$ Show NTSTATUS codes in hex by default
.enable_long_status 1
$$ Set default extension
.setdll psscor4
$$ Show all loaded extensions
.chain /D
$$ Load some command trees
.cmdtree c:\svn\DevTools\WinDBG\cmdtree\cmdtree1.txt
.cmdtree c:\svn\DevTools\WinDBG\cmdtree\cmdtree2.txt
$$ Show some help for the extensions
!wdfkd.help
!psscor4.help
.help /D
Befehl Cheat Sheets
- Crash-Dump-Analyse Poster v3.0
- SOS-Spickzettel (.NET 2.0 / 3.0 / 3.5)
- WinDbg Spickzettel (Art von Dev)
- WinDbg Kernel-Mode Extension Befehle Flashcards
Erweiterungen
„Erweiterungen“ können Sie den Bereich von Befehlen / Funktionen innerhalb WinDBG unterstützt erweitern.
- bigLasagne (bldbgexts & blwdbgue)
- Montage Syntax-Hervorhebung und eine Treiber-Mapping-Tool )
- BigLib Anzahl Reader
- Byakugan < br> - erkennen antidebugging Methoden, vista Heap Visualisierung / Emulation, Spurpuffer im Speicher
- Call-Flow Analyzer + KnExt
- CmdHist
- zeichnet jeden Befehl, den Sie in Ihrem Debug-Sitzung ausgeführt so können Sie erneut ausführen leicht
- Core-Analyzer
- überprüfen Haufen Strukturen für Korruption, Erfassen von Objekten geteilt durch Gewinde, etc
- dom WinDBG Erweiterung
-! (Stlpvector, idt, unhex!,! grep, etc.)
- dumppe
- Dumps PE-Datei aus dem Speicher
- Image Viewer Extension (Vladimir Vukićević)
- Intel UEFI Development Kit Debugger-Tool
- debug UEFI-Firmware
- leaktrap
- GDI / USER Griff Tracker bei der Lecksuche unterstützen
- Mona (erfordert PyKD)
- Satz von Befehlen in die erweiterte Analyse unterstützen / finden Exploits
- MSFK
- bietet automatisierte Crash-Analyse und Bewertung der Sicherheitsrisiken
- narly
- Listen Informationen über geladene Module wie bei Verwendung von SafeSEH, ASLR , DEP, / GS (Puffer Security Checks)
- netext (Rodney Viana)
- (wservice - Liste WCF-Dienstobjekte, wconfig - zeigen .config Linien, whttp - Liste HttpContexts, Wselect / wfrom -! Unterstützung von SQL-Abfragen wie auf Arrays)
- ODbgExt
- open Debugger Erweiterungen
- OllyMigrate
- Debuggee zu einem anderen Debugger passieren, ohne einen Neustart
- Psscor4
- ein Superset von SOS für die Unterstützung bei der Fehlersuche .NET 4-Code verwaltet
- PyDBGExt
- ermöglicht Python-Scripting verwendet werden
- PyKD
- Python ermöglicht Skript verwendet werden WinDBG
- sdbgext (Nynaeve)
-! (Valloc, vallocrwx, HeapAlloc ,! HeapFree,! Remotecall,! remotecall64,! loaddll,! unloaddll, schliessen Wert,! killthread,! adjpriv,! ret)
- SieExtPub
-legacy Erweiterung ... jetzt in WinDBG gebaut in ext.dll
- SOSEX
- mehr Befehle für die Hilfe zum Debuggen von verwalteten .NET 2.0 oder 4.0 Code < br> - SPT / SDBGExt2 ( Steve Niemitz)
-!! (DumpHttpContext, DumpASPNetRequests, DumpSqlConnectionPools, DumpThreadPool usw.)
- Uniqstack
- Quelle an eine Debugger-Erweiterung (ein OSR Online-Konto, um darauf zugreifen)
- viscope
- Code-Coverage-Diagramm
- Kette Warten Traversal / wct.dll (Codeplex Debugging Extensions
- Anzeige Warte Ketten von Anwendungs-Threads (hilft Deadlocks finden )
- windbgshark
- integriert Wireshark-Protokoll-Analysator VM Verkehr Manipulation und Analyse ermöglichen < br> - WinDBG Extensions (Sasha Goldstein)
- Tracer, WCT, heap_stat, bkb, traverse_map, traverse_vector)
- WinDBG Highlight (ColorWindbg.dll) [Use Google Übersetzen Link zu übersetzen] < br> - asm Syntax-Hervorhebung
Schreiben Sie Ihre eigene Erweiterung
- Werkzeuge des Handels: Teil IV - Entwicklung von WinDbg Extension DLLs
- Die Grundlagen der Debugger-Erweiterungen: Kurzzeit-Anstrengung, Long Term Gewinn
WinDBG Mit verwaltetem Code
Debuggen- Breaking auf eine Ausnahme
- brechen auf bestimmte CLR Ausnahme
- Debuggen NET Framework-Quellcode innerhalb Windbg
- Debuggen von verwaltetem Code mit WinDbg und SOS.dll
- Debuggen mit WinDbg. Deadlocks in Anwendungen.
- Einstellung .NET Stützpunkte in Windbg für Anwendungen, den Crash beim Start
Scripting (C #, PS, Python, WinDBG)
- KDAR (Kernel Debugger Anti Rootkit)
- eine Sammlung von Skripten WinDBG
- Sysnative BSOD Scripts / Verarbeitung Apps
- WinDBG Script-Bibliothek
- eine Sammlung von Skripten WinDBG
- Scripting MDbg und DbgHostLib
- ermöglicht verwalteten Code der Managed Debugger (MDBG) und der DbgEng
script
- ExtCS
- ermöglicht die Steuerung von WinDBG über C # Skripte
- PowerDBG
- ermöglicht die Steuerung von WinDBG via Powershell-Skripts
- Pykd
- ermöglicht die Steuerung von WinDBG über Python-Skripte
- windbglib
- Python Wrapper-Bibliothek rund um die pykd Erweiterung für WinDBG, imitiert immlib ( so können Sie Skripte ursprünglich geschrieben für Immunity Debugger verwenden)
Debuggers / Tools, die die dbgeng.dll API / WinDBG Tools
verwenden- A Simple Dbgeng Based User Mode Debugger
- Acorns.Debugging NET Deadlock Detector (verwendet cdb.exe) ( Download )
- CLR Managed Debugger (MDBG)
- DbgHost - Wie ein Debugging steuern Motor
- Debug Diagnostic Tool v1.2 (DebugDiag ), Ver 2.0 + DebugDiag Blog
- Dynamorio - dynamisches binäres Instrumentationswerkzeug, das mit WinDBG in Wechselwirkung treten kann
- IDA + WinDBG Plugin
- GUI WinDBG
- LeakShell (verwaltete Lecks finden)
- mdbglib - Managed Debug API
- PyDbgEng
- Python-Wrapper für Windows Debugging Engine - SOSNET - ein WinDBG Fork / alternativ Shell, die über die Verwendung der SOS-Erweiterung konzentriert und unterstützt C # Scripting
- SOSNET O2 Gabel - Gabel von SOSNET die Rosyln für den C # REPL verwendet (read-eval-print-Schleife) Scripting-Engine
- VDB / vivisect (kenshoto) - stellt eine plattformübergreifende Debugging-API auf WinDBG schichtet
- WinAppDbg + Heappie-WinAppDbg
- einen grundlegenden Windows-Debugger Schreiben
Verschiedene Möglichkeiten zur Generierung von Crash-Dump-Dateien für Post-Mortem-Analyse
- DebugDiag 2.0
- Spickzettel Dump
- enthält, wie Dump von Hyper-V zu erzeugen, VMWare ESX und XenServer-VMs. - Citrix SystemDump
- Tastatur Keypress Kombination
- MiniDumpWriteDump
- (via WIN32 API-Aufruf in Ihrer Anwendung). (Beispiel für C # -Anwendungen) - NMI-Schalter oder (hier)
(Hardware-basierte Funktion ein NMI zu erzeugen ... in der Regel auf High-End-Servern zB HP oder Sie können ein Add-in-PCI-Karte "Universal-PCI-Dump Switch" ). Microsoft NMI Technologie Hintergrund . - ProcDump
- System | Erweiterte Systemeinstellungen | Starten und Wiederherstellen
( Registrierungsinfo ), Frankreich ( wie ein komplettes (Full) Speicherabbild ), Frankreich ( wie Vollständiges Speicherabbild ) zu aktivieren,
( wie Vollständiges Speicherabbild auf Windows 7 zu aktivieren, wenn PC viel Speicher hat ... normalerweise nicht verfügbar, wenn mehr als 2 GB Speicher ) - Task-Manager "Create Dump File"
- UserDump , Anweisungen (sehr altes Werkzeug)
- UserModeProcessDumper , Anweisungen
- Visual Studio "Speichern unter ... Dump"
- WER (Windows Error Berichterstattung .... lokale Deponien)
- WinDBG
Dump Analysis Tools
- Bluescreenview - findet die minidump .dmp die von Windows nach einem BSOD gespeicherten Dateien und extrahiert Informationen über das, was den Absturz verursacht
- Debug.Analyzer (können Dump-Dateien analysieren und Plug-Ins können in .NET geschrieben werden)
- SAD - Einfach Nach Dump (post mortem-Analysator)
- Volatilität - Rahmen für die "Speicher" aufgezeichnet in Dump-Dateien ( Blatt betrügen)
Dump bezogenen Tools
- Citrix dumpcheck - prüft die Konsistenz der Dump-Datei (sieht aus wie es ist aufgegeben worden link + Link )
- Dumpchk (Teil der Debugging Tools) - prüft Konsistenz einer Dump-Datei
- MoonSols Windows Memory Toolkit (früher < a href = "http://web.archive.org/web/20100119182120/http://windd.msuiche.net/" rel = "noreferrer"> windd ) - konvertiert verschiedene rohe Speicherabbilddateien in WinDBG kompatibel DMP-Dateien
- vm2dmp - Microsoft Hyper-V VM Staat Speicherabbild Converter
- vmss2core - wandelt VMWare Snapshot-Datei in eine Core-Dump-Datei ( herunterladen ), ( Anweisungen )
Kernel-Debugging von virtuellen Maschinen
- VMKD - Virtual Machine KD Extensions
- VirtualKD - (Kernel-Debugger-Unterstützung für OS gehosteten in VMWare / VirtualBox)
Videos
- .NET Cracking 101 # 2 - WinDbg Grundlagen
- .NET Debuggen für die Produktionsumgebung (Channel9)
- dotnetConf - Advanced Debugging mit WinDbg und SOS
- David Truxall "Debugging mit WinDBG"
- Mike Taulty Debuggen Speicherverluste
- oredev 2009 Session: Debuggen von .NET-Anwendungen mit WinDbg
- Plural Advanced Windows Debugging
(plus verschiedene andere, die bei Plural) - Tess Ferrandez WinDBG (Channel9)
Blogs
Einige Blogs (Mischung von nativem und verwalteten Code Debugging).
- Erweiterte .NET Debuggen
- Ihre ganze Basis sind gehören uns (Sasha Goldshtein)
- Analyse-v
- ASP.NET Debuggen
- Cyberiafreak (Threading und erweiterte Windows prog und Debugging)
- Debug Analyzer.NET
- Debug and Beyond
- Debugging Experten Magazin Online
- Debuggen Toolbox (Windbg Skripte, Fehlersuche und Fehlerbehebung Werkzeuge und Techniken, um Ihnen zu helfen Software isolieren Probleme).
- my World Entschlüsseln
- greggm des WebLog
- Junfeng Zhang Windows Programmierhinweise
- Kristoffers tidbits
- Mark Russinovich Blog
- Mike Stalls .NET Debuggen Blog
- Naveen Blog
- nie Zweifel Thy Debugger (Carlo)
- Notizen aus einer dunklen Ecke
- Ntdebugging Blog (Microsoft Globales Escalation Services Team)
- Nynaeve. Adventures in Windows-Debugging und Reverse Engineering
- PFE Hinweise für Entwickler für das Field
- Visual Studio Debugger-Team
- WinDbg von Volker von Einem
Erweiterte Artikel und Tutorial Ressourcen
- Erweiterte Debugging-Techniken in WinDbg
- Debuggen von Anwendungen für MS.Net und Windows (Powerpoint Slides)
- Debuggen STL Container mit WinDbg
- Debug Tutorials 1-7 ( Codeproject-Toby Opferman)
- Debugging.tv
- DevelopMentor WinDBG Stichwort Artikel
- Dr. Fu Security Blog - Malware Analysis Tutorials - Reverse-Engineering-Ansatz
- Exploit zu schreiben Tutorial Teil 5: Wie Debugger-Module & Plugins können auf Grund ausnutzen Entwicklung beschleunigen
- Jagd Rootkits
- Remote-Microsoft Windows Server OS Kernel Debuggen Verwenden von Dell Windows-Debugger-Dienstprogramm (DWDU) ( DELL (TM) Windows (R Debugger Utility) 1.1 README )
Alternative Debuggers
- Bokken - ( Inguma ) (GUI für radare)
- BugDbg
- Debug ++ (noch nicht erschienen)
- Debuggy
- Discolored Ring 0 Debugger ( Download )
- EDB (Linux)
- FDBG
- GoBug
- Hades (Ring 3 Debugger mit Anti-Debugger Erkennungsstrategie)
- Hopper (Linux, OSX und Windows) (Windows Debuggen nicht implementiert)
- Hyperdbg
- IDA Debugger
- ImmunityDebugger
- Nanomite
- Obsidian (non-intrusive Debugger)
- OllyDBG
- PEBrowse
- RaceVB6 (VB6 P-Code-Debugger)
- radare
- radare2ui (GUI für radare)
- Rasta Ring 0 Debugger ( RR0D)
- Syser Kernel Debugger
- TRW 2000 (sehr alte Debugger circa W9x ) + Dions Plugin Archiv
- VisualDux Debugger
- Wintruder (erweiterbar Debugger)
- WKTVDebugger (ein Debugger für Visual Basic P-Code) ( herunterladen )
- x64_dbg
- Zeta Debugger
Nützliche Links
- Collaborative RCE Werkzeugbibliothek
- riesige Sammlung von Debugger und Systemebene Tool - cr4zyserb
- riesige Sammlung von Plugins und anderen Debugging-Tool - wie ein Windows Debugger Verweise auf schreiben ( Devon Straw)
- große Sammlung von Links, die Ihnen detaillierte Informationen zu geben, die Sie benötigen würden, wenn Sie wollen Ihren eigenen Debugger zB schreiben PDB-Dateiformat, .DMP Dateiformate, PE Dateistruktur, wie Stack-Traces aufzeichnen, etc, etc. - Tuts4You
-. Entpacker, IDA, OllyDBG, Immunity Debugger Plugins, usw.
Dies ist eine wirklich große Frage.
- Der erste Schritt ist die Speicher-Abbild-Datei in eine WinDbg Instanz zu laden.
- Als nächstes müssen Sie sicherstellen, dass Sie Symbole Setup haben.
- Schließlich können Sie den Befehl
!analyze -v
führen eine grundlegende Analyse auf sie durchgeführt zu bekommen. Sie benötigen Symbol Informationen für Ihren Code haben Dump zu machen lohnt Dateien.
Die Website Speicherabbild, Software Trace, Test, Malware, Victimware und Intelligence Analysis Portal hat sich für mich sehr informativ. Ich habe auch wirklich das Buch Advanced Windows Debugging von Mario Hewardt und Daniel Pravat.
Tess Ferrandez hat eine große Reihe von grundlegenden Übungen und Labore mit Windbg loszulegen. Ich empfehle sie.