Как использовать WinDbg для анализа файла дампа?
Как использовать WinDbg для анализа дампа сбоя для приложения VС++?
Ответ 1
Вот некоторые общие шаги, которые помогут вам:
Во-первых, вы должны изменить настройки своего компилятора, чтобы он создавал файлы PDB, даже для релизов. Более поздние версии компилятора Visual С++ делают это по умолчанию, но во многих версиях Visual С++ вы должны сделать это самостоятельно. Создайте файлы базы данных программы, а затем сохраните архив этих файлов вместе с каждой сборкой вашего приложения. Очень важно, чтобы каждая сборка ваших приложений имела собственный набор PDB. Вы не можете просто повторно использовать те же самые, что вы сделали со сборкой 10, например, для изучения дампов, сгенерированных сборкой 15. За всю жизнь вашего проекта у вас будет тонна PDB, поэтому будьте готовы к этому.
Затем вам нужно будет определить точную версию вашего приложения, которая сгенерировала файл дампа. Если вы создаете свой собственный MiniDumps (например, вызывая MiniDumpWriteDump()), возможно, самый простой способ сделать это - просто сделать часть filename MiniDump - полный номер версии вашего приложения. Для этого вам понадобится разумная схема нумерации версий. В моем магазине мы увеличиваем число сборки по всем ветвям на каждый раз, когда автообъект создает сборку.
Теперь, когда вы получили файл дампа от клиента, вы знаете точную версию приложения, создавшего дамп, и вы нашли файлы PDB для этой сборки.
Теперь вам нужно пройти через историю управления версиями и найти исходный код для этой точной версии программного обеспечения. Лучший способ сделать это - применять "метки" к вашим ветким каждый раз, когда вы делаете сборку. Установите значение метки на точный номер версии, и ее легко найти в истории.
Вы почти готовы запустить WinDbg/Visual С++:
- Получить полное исходное дерево для этой версии вашего приложения. Поместите его в отдельное место на вашем жестком диске, скажем
c:\app_build_1.0.100
для версии приложения 1.0 build # 100. - Получите двоичные файлы для этой точной версии вашего приложения и поместите их где-нибудь на свой жесткий диск. Проще всего просто установить эту версию приложения для получения двоичных файлов.
- Поместите файлы PDB в том же месте, что и двоичные файлы на шаге 2.
Теперь у вас есть два варианта просмотра файла дампа. Вы можете использовать Visual Studio или WinDbg. Использование Visual Studio проще, но WinDbg намного мощнее. В большинстве случаев функциональность в Visual Studio будет достаточной.
Для использования Visual Studio все, что вам нужно сделать, это открыть файл дампа, например, проект. После открытия "запустить" файл дампа (F5 по умолчанию), и если все пути заданы правильно, вы получите право на код, который разбился, дать вам стек вызовов и т.д.
Чтобы использовать WinDbg, вам нужно перепрыгнуть через пару обручей:
- Запустите WinDbg
- Откройте файл дампа. (Ctrl + D по умолчанию)
- Скажите WinDbg, чтобы получить правильные файлы символов MicroSoft. Введите
.symfix
. Это может занять несколько минут, поскольку он вытащит тонну вещей из Интернета. - Скажите WinDbg, где находятся символы (файлы PDB). Введите
.sympath+ c:\pdblocation
, заменяя все, куда вы помещаете файлы PDB для имени пути. Убедитесь, что вы получили знак "плюс" там, где пробелы между.sympath
и значком+
отсутствуют, иначе вы нажмете шаг 3. - Скажите WinDbg, где находится исходный код. Введите
.srcpath c:\app_build_1.0.100
, заменив путь, в котором вы получили код из исходного элемента управления для этой версии программного обеспечения. - Скажите WinDbg на анализ файла дампа. Тип
!analyze -v
Через несколько минут, если все настроено правильно, WinDbg вернет вас к месту вашего сбоя. На данный момент у вас есть миллион возможностей для углубления в пространство вашей прикладной памяти, состояния критических разделов, окон и т.д. Но это выходит за рамки этой публикации.
Удачи!
Ответ 2
(см. разделы "Дамп" ниже)
Основные уроки и демонстрации использования WinDbg
- Установка и настройка WinDbg (средства отладки Windows)
- Майк Таути - слово для WinDBG
- Учебники WinDbg
- Отладчики Windows: Часть 1: Учебное пособие по WinDbg
Различные способы "запустить" /Прикрепить WinDBG
- Начать отладку с помощью Windbg (включает в себя отладку .msi)
- Отладка службы Windows
- Настройка отладки Windows
Workspaces
Понимание того, как работают рабочие области...
- Поднимите свой отладчик: создайте собственное рабочее пространство для отладки windbg
- Обнаружение того, как рабочие области работают в WinDbg
Cmdtree
"cmdtree" позволяет вам определять "меню" команд отладчика для легкого доступа к часто используемым командам без необходимости запоминать краткие имена команд.
Вам не нужно вставлять все определения команд в один и тот же текстовый файл cmdtree.... вы можете сохранить их отдельно и загрузить несколько, если хотите (они затем получают свое собственное окно).
- Удивительный помощник .cmdtree
- Как создать док-станцию cmdtree при запуске в WinDBG
- Упрощение отладки .net-дампов в windbg с использованием .cmdtree
- Microshaoft Cmdtree
- Специальные команды-Выполнить команды из пользовательского интерфейса с .cmdtree
Ввод в эксплуатацию Script
Вы можете использовать параметр -c в командной строке для автоматического запуска WinDBG script при запуске WinDBG.
Предоставляет возможность включить режим разметки DML (Debugger markup language), загрузить определенные расширения, установить точки останова .NET, установить флаги ядра (например, при отладке ядра вам может потребоваться изменить маску DbgPrint, чтобы вы могли отслеживать информацию....ed nt! Kd_DEFAULT_Mask 0xffffffff), загрузить cmdtrees и т.д.
Пример 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
Командные чит-листы
- Плакат анализа дампа сбоев v3.0
- SOS Cheat Sheet (.NET 2.0/3.0/3.5)
- Штрих-код WinDbg (Art of Dev)
- WinDbg Расширение команд расширения Flashcards
Расширения
"Расширения" позволяют расширить диапазон команд/функций, поддерживаемых внутри WinDBG.
- bigLasagne (bldbgexts и blwdbgue)
- подсветка синтаксиса сборки и инструмент сопоставления драйверов) - BigLib Number Reader
- Byakugan
- детектируйте методы антидетонации, визуализацию/эмуляцию визуализации vista, буферы треков в памяти - Анализатор потока вызовов + KnExt
- CmdHist
- записывает каждую команду, которую вы выполнили в своей отладочной сессии, чтобы вы могли легко выполнить повторный запуск - Core Analyzer
- проверьте структуры кучи для коррупции, обнаружите объекты, совместно используемые потоками и т.д. - dom Расширение WinDBG
- (! stlpvector,! idt,! unhex,! grep и т.д.) - dumppe
- выгружает PE файл из памяти - Расширение просмотра изображений (Владимир Вукичевич)
- Инструмент отладчика Intel UEFI Development Kit
- отладка прошивки UEFI - leaktrap
- Отслеживание дескрипторов GDI/USER для помощи в обнаружении утечки - Mona (требуется PyKD)
- набор команд для расширенного анализа/поиска эксплойтов - MSEC
- обеспечивает автоматизированный анализ сбоев и оценку риска безопасности - narly
- информация о загруженных модулях, например, при использовании SafeSEH, ASLR, DEP,/GS (проверки безопасности буфера ) - netext (Rodney Viana)
- (! wservice - список объектов службы WCF, wconfig - показать строки .config,! whttp - list HttpContexts,! wselect/! wfrom - поддержка SQL как запросов на массивах) - ODbgExt
- откройте расширения отладчика - OllyMigrate
- передать debuggee другому отладчику без перезагрузки - Psscor2
- надмножество SOS для помощи в отладке управляемого кода .NET 2.0 - Psscor4
- надмножество SOS для помощи в отладке управляемого кода .NET 4 - PyDBGExt
- позволяет использовать скрипты python - PyKD
- позволяет использовать Python для script WinDBG - sdbgext (Nynaeve)
- (! valloc,! vallocrwx,! heapalloc,! heapfree,! remotecall,! remotecall64,! loaddll,! unloaddll,! закрыть,! killthread,! adjpriv,! ret) - SieExtPub
- расширение расширения... теперь встроено в WinDBG в ext.dll - SOSEX
- больше команд для поддержки отладки управляемого NET 2.0 или 4.0 кода - SPT/SDBGExt2 (Steve Niemitz)
- (! DumpHttpContext,! DumpASPNetRequests,! DumpSqlConnectionPools,! DumpThreadPool и т.д.) - Uniqstack
- источник для расширения отладчика (для доступа к нему требуется учетная запись OSR Online) - viscope
- граф покрытия кода - Wait Chain Traversal/wct.dll(Расширения отладки Codeplex
- отображать цепи ожидания потоков приложений (помогает найти взаимоблокировки) - windbgshark
- интегрирует анализатор протоколов Wireshark для управления и анализа трафика виртуальных машин - Расширения WinDBG (Саша Гольдштейн)
- Tracer, WCT, heap_stat, bkb, traverse_map, traverse_vector) - WinDBG Highlight (ColorWindbg.dll) [Использовать Google Translate для перевода ссылки]
- подсветка синтаксиса asm
Введите собственное расширение
- Инструменты торговли: Часть IV - Разработка DLL файлов расширения WinDbg
- Основы расширений отладчика: краткосрочные усилия, долгосрочный прирост
Использование WinDBG для отладки управляемого кода
- Нарушение исключения
- Нарушение конкретного исключения CLR
- Отладка исходного кода .Net в Windbg
- Отладка исключений в управляемом коде с помощью Windbg
- Отладка управляемого кода с помощью WinDbg и SOS.dll
- Отладка с помощью WinDbg. Тупики в приложениях.
- УПРАВЛЯЕМАЯ ДЕБЮГГИНГ с WINDBG. Введение и индекс
- Настройка точек останова .NET в Windbg для приложений, которые выходят из строя при запуске
Скрипты (С#, PS, Python, WinDBG)
- KDAR (Kernel Debugger Anti Rootkit)
- коллекция скриптов WinDBG - Sysnative BSOD Scripts/Обработка приложений
- WinDBG script library
- коллекция скриптов WinDBG - Scripting MDbg и DbgHostLib
- позволяет управляемый код script управляемому отладчику (MDBG) и DbgEng
< ш > - ExtCS
- позволяет управлять WinDBG с помощью скриптов С# - PowerDBG
- позволяет управлять WinDBG с помощью сценариев Powershell - PyKD
- позволяет управлять WinDBG с помощью скриптов Python - windbglib
- библиотека обертки python вокруг расширения pykd для WinDBG, имитирующая immlib (так что вы можете использовать скрипты, первоначально написанные для Отладчик иммунитета)
Отладчики/Инструменты, которые используют инструменты dbgeng.dll API/WinDBG
- Простой отладчик пользовательского режима на основе Dbgeng
- Acorns.Debugging NET Detlock Detector (использует cdb.exe) (скачать)
- CLR Managed Debugger (MDBG)
- DbgHost - Как управлять механизмом отладки
- Debug Diagnostic Tool v1.2 (DebugDiag), Ver 2.0 + Блог DebugDiag
- Dynamorio - инструмент динамического двоичного инструментария, который может взаимодействовать с WinDBG
- IDA + плагин WinDBG
- GUI WinDBG
- LeakShell (найти управляемые утечки)
- mdbglib - Управляемый API отладки
- PyDbgEng
- оболочка python для Windows Debugging Engine - SOSNET - WinDBG Fork/альтернативная оболочка, которая концентрируется на использовании расширения SOS и поддерживает сценарии на С#
- SOSNET O2 fork - вилка SOSNET, которая использует Rosyln для сценария С# REPL (read-eval-print-loop)
- VDB/Vivisect (kenshoto) - предоставляет кросс-платформенный API отладки, накладываемый на WinDBG
- WinAppDbg + Heappie-WinAppDbg
- Написание базового отладчика Windows
Различные способы создания файлов аварийного дампа для анализа после морфем
- DebugDiag 2.0
- Dump Cheat Sheet
- включает в себя создание дампа из виртуальных машин Hyper-V, VMWare ESX и XenServer. - Citrix SystemDump
- Комбинация клавиш клавиатуры
- MiniDumpWriteDump
- (через вызов WIN32 API внутри вашего приложения). (Пример для приложений С#) - NMI Switch, или (здесь)
(аппаратная функция для генерации NMI... обычно на высокопроизводительных серверах, например HP, или вы можете получить надстройку PCI card "Универсальный коммутатор Dump PCI" ). Технология Microsoft NMI фон. - Procdump
- Система | Расширенные настройки системы | Запуск и восстановление
(информация о реестре),
(как настроить полный (полный) дамп памяти),
(как включить полный дамп памяти),
(как включить полный дамп памяти Windows 7, когда у ПК много памяти... обычно не доступно, если память превышает 2 ГБ) - Диспетчер задач" Создать файл дампа
- UserDump, инструкции (очень старый инструмент)
- UserModeProcessDumper, инструкции
- Visual Studio "Сохранить дамп как..."
- WER (отчеты об ошибках Windows... локальные дампы)
- WinDBG
Инструменты анализа дампа
- BlueScreenView- находит файлы minidump.dmp, сохраненные Windows после BSOD, и извлекает информацию о том, что вызвало сбой
- Debug.Analyzer (можно проанализировать файлы дампа и плагины можно записать в .NET)
- SAD - Простой после дампа (анализатор postmortem)
- Volatility - структура для анализа "памяти", записанной в файлах дампа (чит-лист)
Инструменты, связанные с дампом
- Citrix dumpcheck - проверяет согласованность файла дампа (похоже, что он оставлен ссылка + ссылка)
- dumpchk (часть инструментов отладки) - проверяет согласованность файла Dump
- MoonSols Windows Memory Toolkit (ранее windd) - преобразует различные необработанные файлы дампа памяти в файлы dmp, совместимые с WinDBG.
- vm2dmp - Microsoft Hyper-V VM State to Memory Dump Converter
- vmss2core - конвертирует файл моментального снимка VMWare в файл дампа ядра (скачать), (инструкции)
Отладка виртуальных машин ядра
- VMKD - Расширения виртуальной машины KD
- VirtualKD - (поддержка отладчика ядра для ОС, размещенная в VMWare/VirtualBox)
Видео
- .NET Cracking 101 # 2 - Основы WinDbg
- .NET Debugging для производственной среды (Channel9)
- dotnetConf - Расширенная отладка с помощью WinDbg и SOS
- Дэвид Truxall "Отладка с помощью WinDBG"
- Mike Taulty Отладка утечек памяти
- oredev 2009 Сессия: отладка приложений .NET с помощью WinDbg
- Расширенная отладка Windows Pluralsight
(плюс различные другие в Pluralsight) - Tess Ferrandez WinDBG (Channel9)
Блоги
Некоторые блоги (смесь собственной и управляемой отладки кода).
- Расширенная отладка .NET
- Вся ваша база принадлежит нам (Саша Голдштейн)
- Analyze-v
- Отладка ASP.NET
- Cyberiafreak (прошивка и продвинутые окна прог и отладка)
- Debug Analyzer.NET
- Отладка и последующие
- Отладочный журнал экспертов онлайн
- Отладка Toolbox (скрипты Windbg, инструменты отладки и устранения неполадок и методы, которые помогут вам изолировать проблемы программного обеспечения.)
- Расшифровать мой мир
- greggm WebLog
- Замечания по программированию Windows Junfeng Zhang
- Kristoffer tidbits
- Блог Марка Руссиновича
- Блог отладки Mike Stalls.NET
- Блог Naveen
- Никогда не сомневайтесь в своем отладчике (Carlo)
- Заметки из темного угла
- Блог Ntdebugging (команда Microsoft Global Escalation Services)
- Найнив. Приключения в отладке и обратном проектировании Windows
- Заметки разработчика PFE для поля
- Отладчик Visual Studio
- WinDbg от Volker von Einem
Расширенные статьи и учебные материалы
- Расширенные методы отладки в WinDbg
- Отладка приложений для MS.Net и Windows (Powerpoint Slides)
- Отладка контейнеров STL с помощью WinDbg
- Отладочные учебники 1-7 (CodeProject-Toby Opferman)
- Debugging.tv
- Разработчик WinDBG Tagged articles
- Dr Security Security - учебные руководства по вредоносному ПО - обратный инженерный подход
- Учебное пособие по использованию части 5: Как модули и плагины отладчика могут ускорить базовую разработку эксплойтов
- Охотничьи руткиты
- Отладка ядра операционной системы Microsoft Windows Server с помощью утилиты Dell Debugger Utility (DWDU) (DELL (TM) Утилита отладки Windows (R) 1.1 README)
Альтернативные отладчики
- Bokken - (Inguma) (GUI для радиолокатора)
- BugDbg
- Debug++ (еще не выпущен)
- Отладка
- обесцвеченный Ring 0 отладчик (скачать)
- edb (Linux)
- FDBG
- GoBug
- Hades (отладчик Ring 3 с анти-отладчиком)
- Hopper (Linux, OSX и Windows) (отладка Windows не реализована в настоящее время)
- Hyperdbg
- Отладчик IDA
- ImmunityDebugger
- Nanomite
- Обсидиан (неинтрузивный отладчик)
- OllyDBG
- PEBrowse
- RaceVB6 (отладчик P-кода VB6)
- radare
- radare2ui (графический интерфейс для радара)
- Rasta Ring 0 Отладчик (RR0D)
- Отладчик ядра Syser
- TRW 2000 (очень старый отладчик около W9x) + архив плагинов dions
- Отладчик VisualDux
- Wintruder (расширяемый отладчик)
- WKTVDebugger (отладчик для Visual Basic P-Code) (скачать)
- x64_dbg
- Zeta Debugger
Другие ссылки
- Совместная библиотека инструментов RCE
- огромная коллекция инструментов отладчика и системного уровня - cr4zyserb
- огромная коллекция плагинов и других инструментов отладки - Как написать ссылки отладчика Windows (Devon Straw)
- большой набор ссылок, в которых вы найдете подробную информацию, которая вам понадобится, если вы хотели написать собственный отладчик, например Формат файла PDB, форматы файлов DMP, структура файла PE, как записывать трассировки стека и т.д. И т.д. - Tuts4You
- распаковыватели, IDA, OllyDBG, плагины отладки Immunity и т.д.
Ответ 3
Это очень широкий вопрос.
- Первый шаг - загрузить файл дампа в экземпляр WinDbg.
- Затем вам нужно убедиться, что у вас есть настройка символов.
- Наконец, вы можете запустить команду
!analyze -v
, чтобы выполнить базовый анализ. Вам нужно иметь доступную информацию о символах для вашего кода, чтобы сделать файлы дампа стоящими.
Веб-сайт "Дамп памяти" , "Трассировка программного обеспечения" , "Отладка" , "Вредоносное ПО" , "Портал жертвоприношений и аналитического анализа" была для меня очень информативной. Мне также очень понравилась книга, Расширенная отладка Windows Марио Хьюардт и Даниэль Прават.
Ответ 4
Тесс Феррандез отличный набор базовых учебников и лабораторий, чтобы начать работу с Windbg. Я настоятельно рекомендую их.