Comment utiliser WinDbg pour analyser le crash dump de L'application VC++?
comment utiliser WinDbg pour analyser un fichier dump?
4 réponses
voici quelques étapes générales qui vous feront avancer:
tout d'abord, vous devez modifier les paramètres de votre compilateur afin qu'il crée des fichiers PDB, même pour les compilations release. Les versions ultérieures du compilateur Visual C++ le font par défaut, mais dans de nombreuses versions de Visual C++ vous devez le faire vous-même. Créez des fichiers de base de données de programme, puis gardez une archive de ces fichiers avec chaque construction de votre application. Il est essentiel que tous les construire des applications a son propre ensemble de Pdb. Vous ne pouvez pas simplement réutiliser les mêmes que vous avez fait avec build 10 pour examiner les dumps générés par build 15, par exemple. Pendant la durée de votre projet, vous finirez avec une tonne de PDB, alors soyez prêt pour ça.
ensuite, vous devez être en mesure d'identifier la version exacte de votre application qui a généré le fichier dump. Si vous créez votre propre MiniDumps (en appelant Minidumprwritedump () pour exemple), probablement la façon la plus simple de faire cela est de simplement faire une partie du nom de fichier du MiniDump le numéro de version complet de votre application. Vous aurez besoin d'avoir un système de numérotation de version raisonnable en place pour que cela fonctionne. Dans mon atelier, nous incrémentons le nombre de construction dans toutes les branches d'une fois chaque fois que l'autobuilder crée une construction.
maintenant que vous avez reçu le fichier dump du client, vous connaissez la version exacte de l'application qui a créé le dump, et vous avez trouvé les fichiers PDB pour cette construction.
Maintenant vous devez passer en revue l'histoire de votre contrôle source et trouver le code source pour cette version exacte du logiciel. La meilleure façon de le faire est d'appliquer des "étiquettes" à vos branches à chaque fois que vous faire un build. Définissez la valeur de l'étiquette au numéro de version exact, et il devient facile à trouver dans l'histoire.
Vous êtes presque prêt à feu de WinDbg/Visual C++:
- obtenez l'arborescence complète des sources pour cette version de votre application. Mettez-le dans un endroit séparé sur votre disque dur, dites
c:\app_build_1.0.100
pour la version d'application 1.0 construire #100. - récupérez les binaires pour la version exacte de votre application et mettez-les quelque part sur votre disque dur. Il pourrait être plus facile d'installer simplement cette version de votre application pour obtenir les binaires.
- place les fichiers de L'APB au même endroit que le binaires à l'étape 2.
Maintenant, vous avez deux options pour visualiser le fichier dump. Vous pouvez utiliser Visual Studio ou WinDbg. Utiliser Visual Studio est plus facile, mais WinDbg est beaucoup plus puissant. La plupart du temps, la fonctionnalité de Visual Studio suffira.
pour utiliser Visual Studio, Tout ce que vous avez à faire est d'ouvrir le fichier dump comme si c'était un projet. Une fois ouvert, "lancer" le fichier dump ( F5 par défaut) et si tous les chemins sont définis correctement, cela vous mènera directement au code qui s'est écrasé, vous donnera une pile d'appels, etc.
Pour utiliser WinDbg, vous devez sauter à travers quelques cerceaux:
- Démarrer WinDbg
- ouvrir le fichier dump. ( Ctrl + D par défaut)
- dites à WinDbg d'aller chercher les fichiers Microsoft symbol corrects. Type
.symfix
. Cela peut prenez quelques instants qu'il va tirer une tonne de choses de l'Internet. - dites à WinDbg où sont les symboles (fichiers PDB). Tapez
.sympath+ c:\pdblocation
, en remplaçant les fichiers PDB par le chemin d'accès. Assurez-vous d'obtenir le signe plus là-dedans avec aucun espace blanc entre.sympath
et le signe+
sinon vous allez rater l'étape 3. - dites à WinDbg où est le code source. Tapez
.srcpath c:\app_build_1.0.100
en remplaçant le chemin où vous avez le code de source control pour cette version du logiciel. - dites à WinDbg d'analyser le fichier. Type
!analyze -v
Après quelques instants, si tout est correctement configuré, WinDbg, vous l'emplacement de votre accident. À ce stade, vous avez un million d'options pour creuser profondément dans l'espace mémoire de votre application, l'état des sections critiques, fenêtres, etc. Mais c'est chemin au-delà de la la portée de ce post.
bonne chance!
(voir les sections" Dump "ci-dessous)
tutoriels de base et démonstrations d'utilisation de WinDbg
- installation et configuration de WinDbg (Windows Debug Tools)
- Mike Taulty - Un mot de WinDBG
- Tutoriels WinDbg
- Windows Débogueurs: Partie 1: Un WinDbg Tutoriel
Différentes Manières de "Démarrer"/Joindre WinDBG
- Démarrer le Débogage avec Windbg (comprend comment déboguer une .msi)
- comment déboguer un service Windows
- mise en place du débogage de Windows
espaces de travail
Comprendre comment les espaces de travail...
- Proxénète votre débogueur: la Création d'un espace de travail personnalisé pour windbg de débogage
- découvrir comment les espaces de travail fonctionnent à WinDbg
Cmdtree
Un "cmdtree" vous permet de définir un "menu" de commandes du débogueur pour faciliter l'accès aux commandes fréquemment utilisées sans avoir à vous rappeler l'laconique noms de commande.
You ne mettez pas toutes les définitions de commande dans le même fichier texte cmdtree....vous pouvez les séparer et en charger plusieurs si vous le souhaitez (ils auront alors leur propre fenêtre).
- Amazing helper .cmdtree
- Comment puis-je faire un quai de fenêtre cmdtree au démarrage dans WinDBG
- ce qui rend plus facile de déboguer les décharges .net dans windbg en utilisant .cmdtree
- Microshaoft Cmdtree
- commande spéciale-exécuter des commandes à partir d'une Interface utilisateur personnalisée avec .cmdtree
Script De Démarrage
vous pouvez utiliser l'option-c sur la ligne de commande pour exécuter automatiquement un script WinDBG lorsque vous démarrez WinDBG.
donne l'occasion d'activer le mode DML (Debugger markup language), load extensions particulières, points de rupture de l'exception .net, options du noyau (par exemple, lors du débogage du noyau, vous pourriez avoir besoin de changer le masque DbgPrint pour voir les informations de traçage....ed nt!Kd_DEFAULT_Mask 0xffffff), load cmdtrees,etc.
un exemple de 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:\WinDDK00.16385.1\bin\x86\wdfkd.dll
!wdftmffile C:\WinDDK00.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
Commande Tricher Feuilles
- Crash de l'Analyse de l'image de l'Affiche de la v3.0
- feuille de triche SOS (.NET 2.0/3.0/3.5)
- WinDbg feuille de triche (Art Dev)
- WinDbg Kernel-Mode Extension Commandes Flashcards
Extensions
"Extensions" vous permettent d'étendre la gamme de commandes/fonctionnalités prises en charge à L'intérieur de WinDBG.
- bigLasagne (bldbgexts & blwdbgue)
- mise en évidence de la syntaxe d'assemblage et outil de cartographie des pilotes)
- BigLib Numéro De Lecteur
- Byakugan
- détection des méthodes antidéflagrantes, visualisation/émulation vista heap, tampons track en mémoire
- Appel De L'Analyseur De Flux + KnExt
- CmdHist
- enregistre chaque commande que vous avez exécutée dans votre session de débogage pour que vous puissiez ré-exécuter facilement
- Analyseur de cœur
- vérifier les structures de tas pour la corruption, détecter les objets partagés par les threads, etc
- dom WinDBG Extension
- (!stlpvector,!idt, !unhex,!grep, etc)
- dumppe
- dumps fichier PE à partir de la mémoire
- Image Viewer Extension (Vladimir Vukićević)
- outil de débogage Intel UEFI Development Kit
- debug micrologiciel UEFI
- leaktrap
- GDI/handle de l'UTILISATEUR tracker pour aider à la détection des fuites
- Mona (nécessite PyKD)
- ensemble de commandes pour aider à l'analyse avancée/trouver des exploits
- MSEC
- analyse automatisée des collisions et évaluation des risques de sécurité
- narly
- les listes d'info sur les modules chargés comme si à l'aide de SafeSEH, l'ASLR, DEP /GS (Tampon Contrôles de Sécurité)
- netext (Rodney Viana)
- (!wservice-liste des objets de service de la FMC, !wconfig-show .config lignes !whttp-list HttpContexts,!wselect/!wfrom-support SQL comme les requêtes sur les tableaux)
- ODbgExt
- ouvrir les extensions de débogueur
- OllyMigrate
- passer debuggee à un autre debugger sans redémarrer
- Psscor2
- un super-ensemble de SOS pour aider au débogage du code géré par .NET 2.0
- Psscor4
- un super-ensemble de SOS pour aider au débogage.
- PyDBGExt
- permet d'utiliser les scripts python
- PyKD
- permet à Python d'être utilisé pour script WinDBG
- sdbgext (Nynaeve)
-(!valloc, !vallocrwx, !heapalloc,!heapfree,!remotecall, !remotecall64,!loaddll, !unloaddll,!à proximité, !killthread !adjpriv,!ret)
- SieExtPub
-extension de l'héritage...désormais intégré à WinDBG in ext.dll
- SOSEX
- plus de commandes pour aider à déboguer le code géré NET 2.0 ou 4.0
- SPT / SDBGExt2 (Steve Niemitz)
- (!DumpHttpContext,!DumpASPNetRequests,!DumpSqlConnectionPools,!DumpThreadPool, etc)
- Uniqstack
- source d'une extension de débogueur (besoin D'un compte OSR en ligne pour y accéder))
- viscope
- graphique de couverture des codes
- de la Chaîne d'Attente de la Traversée/wct.dll (Extensions de débogage Codeplex
- afficher les chaînes d'attente des threads d'application (aide à trouver ) )
- windbgshark
- intègre un analyseur de protocole Wireshark pour permettre la manipulation et l'analyse du trafic VM
- WinDBG Extensions (Sasha Goldstein)
- Tracer, WCT, heap_stat, bkb, traverse_map, traverse_vector)
- WinDBG Mettre En Surbrillance (ColorWindbg.dll) [utilisez Google Translate pour traduire le lien]
- surlignage de syntaxe asm
écrivez la vôtre extension
- Outils du métier: Partie IV - le Développement de WinDbg Dll d'Extension
- Les principes de base d'Extensions de Débogueur: à Court Terme, à Long Terme Gain
utilisant WinDBG pour déboguer le code géré
- Casser sur une Exception
- break on specific CLR Exception
- Débogage .Net framework code source dans Windbg
- Débogage des exceptions dans le code géré à l'aide de Windbg
- Débogage de code géré à l'aide de WinDbg et SOS.dll
- Débogage avec WinDbg. Blocages dans les Applications.
- DÉBOGAGE GÉRÉ avec WINDBG. Introduction et Index
- paramètre. net points de rupture dans Windbg pour les applications qui s'écrasent au démarrage
Scripting (C#, PS, Python, WinDBG)
- KDAR (Kernel Debugger Anti Rootkit)
- une collection de scripts WinDBG
- Sysnative BSOD Scripts / Processing Apps
- WinDBG Script library
- une collection de scripts WinDBG
- Scripting MDbg and DbgHostLib
- permet au code géré de script le managé Debugger (MDBG) et le DbgEng
- ExtCS
- permet le contrôle de WinDBG via des scripts C#
- PowerDBG
- permet le contrôle de WinDBG via des scripts Powershell
- Pykd
- permet le contrôle de WinDBG via des scripts Python
- windbglib
- bibliothèque d'enveloppe python autour de l'extension pykd pour WinDBG, imitant immlib (pour que vous puissiez utiliser des scripts écrits à l'origine pour le débogueur D'immunité)
débogueurs/outils qui utilisent le dbgeng.dll API/outils WinDBG
- Un Simple Débogueur En Mode Utilisateur Basé Sur Dbgeng
- glands.Débogage Net Deadlock Detector (utilise cdb.exe) ( télécharger )
- CLR Managed Debugger (MDBG)
- DbgHost-Comment commander un moteur de débogage
- Debug Diagnostic Tool v1.2 (DebugDiag), Ver 2.0 + DebugDiag Blog 151990920"
- Dynamorio - outil d'instrumentation binaire dynamique pouvant interagir avec WinDBG
- IDA + WinDbg plugin
- GUI WinDBG
- LeakShell (trouver des fuites gérées)
- mdbglib - Managed Debug API
- Pydbgen
- Python wrapper for Windows Debugging Engine - SOSNET - un fourche WinDBG / shell alternatif qui se concentre sur l'utilisation de L'extension SOS et prend en charge C# scripting
- SOSNET O2 fourche - fourche SOSNET qui utilise Rosyln pour le moteur de script C# REPL (read-eval-print-loop)
- VDB/Vivisect (kenshoto) - fournit une API de débogage multiplateforme superposée sur WinDBG
- WinAppDbg + Heappie-WinAppDbg 151990920"
- l'Écriture d'une base débogueur Windows
différentes façons de générer un crash Dump Fichiers pour analyse Post-Mortem
- DebugDiag 2.0
- Drop Cheat Sheet
- inclut la façon de générer dump à partir de Hyper-V, VMWare ESX, et XenServer VMs. - Citrix SystemDump
- Combinaison De Touches De Clavier
- MiniDumpWriteDump
- (via L'appel de L'API WIN32 à L'intérieur de votre application). (exemple pour les applications C#) - interrupteur NMI , ou (ici)
(fonction basée sur le matériel pour générer un INM...généralement trouvé sur les serveurs haut de gamme par exemple HP ou vous pouvez obtenir un add-in carte PCI " universel PCI Commutateur de Dump" ). Microsoft NMI de la technologie arrière-plan . - Procdump
- Système|Paramètres Système Avancés|Démarrage et Récupération
( info registre ),
( comment configurer une Complète (Full) de Vidage de Mémoire ),
( comment faire pour activer la Mémoire complète ),
( comment activer le Dump mémoire complète sur Windows 7 lorsque le PC a beaucoup de mémoire...normalement pas disponible quand plus de 2 Go de mémoire ) - Gestionnaire Des Tâches "Créer Un Fichier De Vidage"
- UserDump , instructions (outil très ancien)
- UserModeProcessDumper , instructions
- Visual Studio "Enregistrer Une Image Sous..."
- WER (rapport d'Erreurs Windows....déchets locaux)
- WinDBG
L'Analyse De L'Image Outils
- BlueScreenView - trouve le minidiump .les fichiers DMP sauvegardés par Windows après un BSOD, et des extraits des informations sur ce qui a causé la crash
- Debug.Analyseur (peut analyser les fichiers dump et les plug-ins peuvent être écrits en .NET)
- TRISTE - Simple Après Vidage (post-mortem de l'analyseur)
- "15197450920 la" Volatilité - cadre pour l'analyse de la "mémoire" enregistré dans les fichiers de vidage ( cheat sheet )
Dump outils associés
- Citrix dumpcheck-vérifie la cohérence du fichier dump (on dirait qu'il a été abandonné link + link )
- dumpchk (partie des outils de débogage) - vérifie la cohérence d'un fichier Dump
- MoonSols Windows Memory Toolkit (anciennement windd ) - convertit divers dump mémoire brute fichiers dans des fichiers DMP compatibles avec WinDBG
- vm2dmp - Microsoft Hyper-V Vm State to Memory Dump Converter
- vmss2core - convertit le fichier snapshot VMWare en un fichier core dump ( download ), ( instructions )
Débogage Du Noyau Machines Virtuelles
- VMKD - machine virtuelle KD Extensions
- VirtualKD - (débogueur de noyau de support pour OS hébergé dans VMWare/VirtualBox)
Vidéos
- ."
- . débogage Net pour L'environnement de Production (Channel9)
- dotnetConf - Débogage avancé avec WinDbg et SOS
- David Truxall" Debugging with WinDBG "
- Mike Taulty Le Débogage Des Fuites De Mémoire
- Oredev session 2009: Debugging. Net Applications with WinDbg
- Pluralsight Avancées de Débogage de Windows
(en plus de divers autres Pluralsight)- Tess Ferrandez WinDBG (Canal 9)
Blogs
quelques blogs (mélange de débogage de code natif et géré).
- Avancée .NET de Débogage
- Toute Votre Base Nous Appartient (Sasha Goldshtein)
- Analyze-v
- ASP.NET débogage
- Cyberiafreak (filetage et les avancées de windows prog et le débogage)
- Debug Analyzer.NET
- Debug et au-Delà
- Débogage Des Experts Du Magazine En Ligne
- Boîte À Outils De Débogage (Scripts Windbg, outils et techniques de débogage et de dépannage pour vous aider à isoler les problèmes de logiciel.)
- décrypter mon monde
- greggm's WebLog
- Junfeng Zhang Windows Notes de Programmation
- Kristoffer de tidbits
- le Blog de Mark Russinovich
- Mike Stands .NET de Débogage Blog
- le Blog de Naveen
- Ne Doutez Jamais De Ton Debugger (Carlo)
- des Notes à partir d'un Coin Sombre
- Ntdebugging Blog (Microsoft Mondial de l'Escalade de l'équipe des Services)
- Nynaeve. Aventures dans Débogage et rétroingénierie de Windows
- PFE Développeur Notes pour le Champ
- Débogueur Visual Studio Team
- WinDbg by Volker von Einem
Avancé des Articles et des Ressources Tutoriel
- Débogage Avancées Techniques dans WinDbg
- Debugging Applications for MS.Net et Windows (diapositives Powerpoint)
- Débugging STL Containers with WinDbg
- Debug Tutorials 1-7 (CodeProject-Toby Opferman)
- Debugging.tv
- développement ou WinDBG articles étiquetés
- Dr Fu Blog sur la Sécurité - Analyse des logiciels Malveillants Tutoriels - Reverse Engineering
- Exploiter l'écriture de la partie tutoriel 5 : Comment débogueur modules et plugins peuvent accélérer la vitesse de base d'exploiter développement
- Rootkits De Chasse
- Remote Microsoft Windows Server OS Kernel Debugging Using Dell Windows Debugger Utility (DWDU) ( DELL (TM) Windows (R) Debugger Utility 1.1 README )
D'Autres Débogueurs
- Bokken - ( Inguma ) (GUI pour radare)
- BugDbg
- "15199910920 de Débogage"++ (pas encore sorti)
- Debuggy
- anneau décoloré 0 débogueur ( télécharger )
- edb (Linux)
- FDBG
- GoBug
- Hadès (Ring 3 débogueur avec anti débogueur stratégie de détection)
- Hopper (Linux, OSX et Windows) (Windows débogage pas actuellement mis en œuvre)
- Hyperdbg
- IDA Débogueur
- ImmunityDebugger
- Nanomite
- Obsidienne (non-intrusive débogueur)
- OllyDBG
- PEBrowse
- RaceVB6 (VB6 P-Code debugger)
- radare
- radare2ui (GUI for radare)
- Rasta Ring 0 Debugger (RR0D)
- Syser Débogueur De Noyau
- TRW 2000 (très ancien débogueur circa W9x) + dions plugin archive
- Debugger VisualDux
- Wintruder (débogueur extensible)
- WKTVDebugger (un débogueur pour Visual Basic P-Code) ( download )
- x64_dbg
- Zeta Debugger
Autres Liens
- Collaborative RCE Tool Library
- énorme collection d'outils de débogage et de niveau système - cr4zyserb
- énorme collection de plugins et d'autres outils de débogage - Comment Écrire un Débogueur Windows Références (Devon Paille)
- grande collection de liens vous donnant des informations détaillées dont vous auriez besoin si vous vouliez écrire votre propre débogueur par exemple le format de fichier PDB, .DMP formats de fichier, le Fichier PE structure, comment enregistrer les traces de pile, etc, etc. - Tuts4You
- unpackers, IDA, OllyDBG, Immunity Debugger plugins, etc.
C'est une question très large.
- la première étape consiste à charger le fichier dump dans une instance WinDbg.
- ensuite, vous devez vous assurer que vous avez une configuration de symboles.
- enfin, vous pouvez exécuter la commande
!analyze -v
pour obtenir une analyse de base effectuée sur elle. Vous avez besoin d'avoir des informations de symbole disponibles pour votre code pour rendre les fichiers dump valables.
le site Vidage de la Mémoire, Logiciels de Trace, le Débogage, les logiciels Malveillants, Victimware et l'Analyse du Renseignement Portail a été très instructif pour moi. J'ai aussi vraiment apprécié le livre, "Advanced Windows Debugging de Mario Hewardt et Daniel Pravat.
Tess Ferrandez a un grand ensemble de tutoriels de base et les laboratoires pour commencer avec Windbg. Je les recommande fortement.