Как использовать WinDbg для анализа аварийного дампа приложения VС++?
-
06-09-2019 - |
Вопрос
Как мне использовать WinDbg для анализа файла дампа?
Решение
Вот несколько общих шагов, которые помогут вам на этом пути:
Во-первых, вы должны изменить настройки вашего компилятора, чтобы он создавал файлы PDB, даже для выпускных сборок.Более поздние версии Визуальный С++ компилятор делает это по умолчанию, но во многих версиях Visual C++ это необходимо делать самостоятельно.Создавайте файлы базы данных программы, а затем сохраняйте архив этих файлов вместе с каждой сборкой вашего приложения.Крайне важно, чтобы каждая сборка вашего приложения имела собственный набор PDB.Вы не можете просто повторно использовать те же файлы, которые вы создали в сборке 10, например, для проверки дампов, созданных сборкой 15.За время существования вашего проекта у вас будет масса PDB, так что будьте к этому готовы.
Далее вам необходимо определить точную версию вашего приложения, создавшего файл дампа.Если вы создаете свои собственные MiniDumps (вызвав МиниДампЗаписьДамп() например), вероятно, самый простой способ сделать это — просто сделать часть имени файла MiniDump полным номером версии вашего приложения.Чтобы это работало, вам понадобится разумная схема нумерации версий.В моем магазине мы увеличиваем номер сборки во всех ветках на единицу каждый раз, когда автосборщик создает сборку.
Теперь, когда вы получили файл дампа от клиента, вы знаете точную версию приложения, создавшего дамп, и нашли файлы PDB для этой сборки.
Теперь вам нужно просмотреть историю системы управления версиями и найти исходный код именно этой версии программного обеспечения.Лучший способ сделать это — применять «метки» к вашим ветвям каждый раз, когда вы создаете сборку.Установите для метки точный номер версии, и ее будет легко найти в истории.
Вы почти готовы запустить WinDbg/Visual C++:
- Получите полное дерево исходного кода для этой версии вашего приложения.Поместите его в отдельное место на жестком диске, скажем
c:\app_build_1.0.100
для версии приложения 1.0, сборка №100. - Получите двоичные файлы для конкретной версии вашего приложения и поместите их на жесткий диск.Возможно, проще всего просто установить эту версию вашего приложения, чтобы получить двоичные файлы.
- Поместите файлы PDB в то же место, что и двоичные файлы на шаге 2.
Теперь у вас есть два варианта просмотра файла дампа.Вы можете использовать Визуальная Студия или ВинДбг.Использовать Visual Studio проще, но WinDbg гораздо мощнее.В большинстве случаев функциональности Visual Studio будет достаточно.
Чтобы использовать Visual Studio, все, что вам нужно сделать, это открыть файл дампа, как будто это проект.После открытия «запустите» файл дампа (F5 по умолчанию), и если все пути установлены правильно, вы попадете прямо к коду, который потерпел сбой, предоставит вам стек вызовов и т. д.
Чтобы использовать WinDbg, вам придется преодолеть пару препятствий:
- Запустить WinDbg
- Откройте файл дампа.(Ctrl + Д по умолчанию)
- Скажите WinDbg, чтобы он взял правильные файлы символов Microsoft.Тип
.symfix
.Это может занять несколько минут, так как из Интернета будет удалено огромное количество данных. - Сообщите WinDbg, где находятся символы (файлы PDB).Тип
.sympath+ c:\pdblocation
, заменяя путь туда, где вы помещаете файлы PDB.Убедитесь, что вы поставили там знак плюса без пробелов между.sympath
и+
подпишите, иначе вы испортите шаг 3. - Сообщите WinDbg, где находится исходный код.Тип
.srcpath c:\app_build_1.0.100
подставив путь, по которому вы получили код из системы контроля версий для этой версии программного обеспечения. - Скажите WinDbg проанализировать файл дампа.Тип
!analyze -v
Через несколько секунд, если все настроено правильно, WinDbg доставит вас прямо к месту сбоя.На этом этапе у вас есть миллион возможностей для глубокого изучения пространства памяти вашего приложения, состояния критических разделов, окон и т. д.Но это способ выходит за рамки этого поста.
Удачи!
Другие советы
(см. раздел «Дамп» ниже)
Основные руководства и демонстрации использования WinDbg
- Установка и настройка WinDbg (средства отладки Windows)
- Майк Толти — Слово для WinDBG
- Учебники по WinDbg
- Отладчики Windows:Часть 1:Учебное пособие по WinDbg
Различные способы «запустить»/подключить WinDBG
- Начать отладку с помощью Windbg (включая отладку .msi)
- Как отладить службу Windows
- Настройка отладки Windows
Рабочие пространства
Понимание того, как работают рабочие области...
- Улучшите свой отладчик:Создание пользовательского рабочего пространства для отладки Windbg
- Раскрытие того, как работают рабочие пространства в WinDbg
Дерево команд
«Дерево cmdtree» позволяет вам определить «меню» команд отладчика для быстрого доступа к часто используемым командам без необходимости запоминать краткие имена команд.
Вам не обязательно помещать все определения команд в один и тот же текстовый файл cmdtree... вы можете хранить их отдельно и загружать несколько, если хотите (тогда они получат свое собственное окно).
- Удивительный помощник .cmdtree
- Как сделать крепление окна cmdtree при запуске в WinDBG
- Упрощение отладки дампов .net в Windbg с помощью .cmdtree
- Микрошаофт Cmdtree
- Специальная команда — выполнение команд из настраиваемого пользовательского интерфейса с помощью .cmdtree.
Скрипт запуска
Вы можете использовать опцию -c в командной строке для автоматического запуска сценария WinDBG при запуске WinDBG.
Дает возможность включить режим DML (язык разметки отладчика), загружать определенные расширения, устанавливать точки останова исключений .NET, устанавливать флаги ядра (например,при отладке ядра вам может потребоваться изменить маску DbgPrint, чтобы вы могли видеть информацию трассировки....ed nt!Kd_DEFAULT_Mask 0xffffffff), загрузить cmdtrees и т. д.
Пример скрипта:
$$ 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 (.NET 2.0/3.0/3.5)
- Шпаргалка по WinDbg (Искусство разработки)
- Карточки с командами расширения режима ядра WinDbg
Расширения
«Расширения» позволяют расширить диапазон команд/функций, поддерживаемых внутри WinDBG.
- bigLasagne (bldbgexts & blwdbgue)
- подсветка синтаксиса сборки и инструмент сопоставления драйверов) - Считыватель номеров BigLib
- Бьякуган
- обнаружение методов защиты от отладки, визуализация/эмуляция кучи Vista, отслеживание буферов в памяти. - Анализатор потока вызовов + KnExt
- CmdHist
- записывает каждую команду, которую вы выполнили в сеансе отладки, чтобы вы могли легко выполнить ее повторно - Анализатор ядра
- проверять структуры кучи на наличие повреждений, обнаруживать объекты, совместно используемые потоками, и т. д. - Расширение dom WinDBG
- (!stlpvector, !idt, !unhex, !grep и т. д.) - дамп
- выгружает PE-файл из памяти - Расширение для просмотра изображений (Владимир Вукичевич)
- Инструмент отладчика Intel UEFI Development Kit
- отладка прошивки UEFI
- ловушка для утечек
- Трекер GDI/USER для помощи в обнаружении утечек - Мона (требуется PyKD)
- набор команд для помощи в расширенном анализе/поиске эксплойтов - МСЕК
- обеспечивает автоматический анализ сбоев и оценку рисков безопасности. - почти
- выводит информацию о загруженных модулях, например, при использовании SafeSEH, ASLR, DEP, /GS (проверка безопасности буфера) - нетекст (Родни Виана)
- (!wservice — список объектов службы WCF, !wconfig — показать строки .config, !whttp — список HttpContexts, !wselect/!wfrom — поддержка SQL-подобных запросов к массивам) - ODbgExt
- открытые расширения отладчика - OllyMigrate
- передать отлаживаемый файл другому отладчику без перезапуска - Псскор2
— расширенный набор SOS для помощи в отладке управляемого кода .NET 2.0. - Псскор4
— расширенный набор SOS для помощи в отладке управляемого кода .NET 4. - PyDBGExt
- позволяет использовать скрипты Python
- ПиКД
- позволяет использовать Python для написания сценариев WinDBG - sdbgext (Найнив)
-(!valloc, !vallocrwx, !heapalloc, !heapfree, !remotecall, !remotecall64, !loaddll, !unloaddll, !close, !killthread, !adjpriv, !ret) - SieExtPub
-устаревшее расширение... теперь встроено в WinDBG в ext.dll - СОСЕКС
- дополнительные команды для помощи в отладке управляемого кода NET 2.0 или 4.0. - SPT/SDBGExt2 (Стив Нимиц)
- (!DumpHttpContext, !DumpASPNetRequests, !DumpSqlConnectionPools, !DumpThreadPool и т. д.) - Юникстек
- исходный код расширения отладчика (для доступа к нему требуется учетная запись OSR Online) - вископ
- график покрытия кода - Обход цепочки ожидания/wct.dll (расширения отладки Codeplex)
- отображать цепочки ожидания потоков приложений (помогает найти тупики) - ветряная акула
- интегрирует анализатор протоколов Wireshark для манипулирования и анализа трафика виртуальных машин. - Расширения WinDBG (Саша Гольдштейн)
- Tracer, WCT, heap_stat, bkb, traverse_map, traverse_vector) - Основные моменты WinDBG (ColorWindbg.dll) [Используйте Google Translate для перевода ссылки]
- подсветка синтаксиса asm
Напишите свое собственное расширение
- Инструменты торговли:Часть IV. Разработка библиотек расширения WinDbg
- Основы расширений отладчика:Краткосрочные усилия, долгосрочная выгода
Использование WinDBG для отладки управляемого кода
- Преодоление исключения
- Нарушение конкретного исключения CLR
- Отладка исходного кода .Net framework в Windbg
- Отладка исключений в управляемом коде с помощью Windbg
- Отладка управляемого кода с помощью WinDbg и SOS.dll
- Отладка с помощью WinDbg.Тупики в приложениях.
- УПРАВЛЯЕМАЯ ОТЛАДКА с помощью WINDBG.Введение и указатель
- Установка точек останова .NET в Windbg для приложений, которые аварийно завершают работу при запуске
Написание сценариев (C#, PS, Python, WinDBG)
- KDAR (Антируткит отладчика ядра)
- коллекция скриптов WinDBG - Скрипты Sysnative BSOD/приложения для обработки
- Библиотека сценариев WinDBG
- коллекция скриптов WinDBG - Создание сценариев MDbg и DbgHostLib
- позволяет управляемому коду создавать сценарии для управляемого отладчика (MDBG) и DbgEng. - ЭкстКС
- позволяет управлять WinDBG через сценарии C#. - PowerDBG
- позволяет управлять WinDBG через сценарии Powershell.
- Пикд
- позволяет управлять WinDBG через скрипты Python - ветербглиб
- библиотека-оболочка Python вокруг расширения pykd для WinDBG, имитирующая immlib (поэтому вы можете использовать сценарии, изначально написанные для Immunity Debugger)
Отладчики/инструменты, использующие API dbgeng.dll/инструменты WinDBG
- Простой отладчик пользовательского режима на основе Dbgeng
- Acorns.Debugging NET Deadlock Detector (использует cdb.exe) (скачать)
- Управляемый CLR отладчик (МДБГ)
- DbgHost — Как управлять механизмом отладки
- Инструмент диагностики отладки v1.2 (ОтладкаДиаг), Версия 2.0 + Блог DebugDiag
- Динаморио - инструмент динамического двоичного инструментирования, который может взаимодействовать с WinDBG.
- ИДА + Плагин WinDBG
- Графический интерфейс WinDBG
- LeakShell (найти управляемые утечки)
- mdbglib — API управляемой отладки
- PyDbgEng
- оболочка Python для механизма отладки Windows - СОСНЕТ - WinDBG Fork/альтернативная оболочка, которая концентрируется на использовании расширения SOS и поддерживает сценарии C#.
- Вилка SOSNET O2 - ответвление SOSNET, использующее Rosyln для механизма сценариев C# REPL (read-eval-print-loop).
- ВДБ/Вивисект (kenshoto) — предоставляет API кросс-платформенной отладки, реализованный на уровне WinDBG.
- WinAppDbg + Heappie-WinAppDbg
- Написание базового отладчика Windows
Различные способы создания файлов аварийных дампов для посмертного анализа
- ДебагДиаг 2.0
- Шпаргалка по дампу
- включает в себя создание дампа виртуальных машин Hyper-V, VMWare ESX и XenServer. - Citrix SystemDump
- Комбинация клавиш клавиатуры
- MiniDumpЗаписьДамп
- (через вызов WIN32 API внутри вашего приложения). (Пример для приложений C#) - НМИ-переключатель, или (здесь)
(аппаратная функция для создания NMI... обычно встречается на высокопроизводительных серверах, например HP или вы можете получить дополнительную карту PCI «Универсальный переключатель дампа PCI»).Технология Microsoft NMI фон. - Прокдамп
- Система|Дополнительные параметры системы|Запуск и восстановление
(информация о реестре),
(как настроить полный (полный) дамп памяти),
(как включить полный дамп памяти),
(как включить полный дамп памяти в Windows 7, если на компьютере много памяти... обычно недоступно, если памяти более 2 ГБ) - Диспетчер задач «Создать файл дампа»
- Пользовательский дамп, инструкции (очень старый инструмент)
- Усермодепроцессдумпер, инструкции
- Visual Studio «Сохранить дамп как…»
- WER (отчеты об ошибках Windows....локальные дампы)
- WinDBG
Инструменты анализа дампа
- BlueScreenView - находит файлы минидампа .dmp, сохраненные Windows после BSOD, и извлекает информацию о том, что вызвало сбой
- Отладка.Анализатор (может анализировать файлы дампа и плагины могут быть написаны на .NET)
- SAD — простой после дампа (посмертный анализатор)
- Волатильность - фреймворк для анализа "памяти", записанной в файлах дампа (шпаргалка)
Инструменты, связанные с дампом
- Citrix dumpcheck — проверяет целостность файла дампа (похоже, что он был заброшен). связь + связь)
- дампчик (часть инструментов отладки) — проверяет целостность файла дампа.
- MoonSols Набор инструментов для работы с памятью Windows (ранее ветер) — преобразует различные файлы дампа необработанной памяти в файлы dmp, совместимые с WinDBG.
- вм2дмп - Конвертер состояния виртуальной машины Microsoft Hyper-V в дамп памяти
- vmss2core - преобразует файл моментального снимка VMWare в файл дампа ядра (скачать), (инструкции)
Отладка ядра виртуальных машин
- ВМКД - Расширения KD виртуальной машины
- ВиртуалКД - (поддержка отладчика ядра для ОС, размещенных в VMWare/VirtualBox)
Видео
- Взлом .NET 101 #2 – основы WinDbg
- Отладка .NET для производственной среды (Channel9)
- dotnetConf — расширенная отладка с помощью WinDbg и SOS
- Дэвид Труксолл «Отладка с помощью WinDBG»
- Майк Талти устраняет утечки памяти
- Оредев 2009 Сессия:Отладка приложений .NET с помощью WinDbg
- Расширенная отладка Windows Pluralsight
(плюс другие на Pluralsight) - Тесс Феррандес WinDBG (Channel9)
Блоги
Некоторые блоги (сочетание встроенной и управляемой отладки кода).
- Расширенная отладка .NET
- Вся ваша база принадлежит нам (Саша Гольдштейн)
- Анализ-v
- Отладка ASP.NET
- Кибериафрик (потоковая обработка и расширенные программы Windows и отладка)
- Отладочный анализатор.NET
- Отладка и не только
- Интернет-журнал «Эксперты по отладке»
- Панель инструментов отладки (Скрипты Windbg, инструменты и методы отладки и устранения неполадок, которые помогут вам изолировать проблемы программного обеспечения.)
- Расшифруй мой мир
- Веб-журнал greggm
- Заметки Цзюньфэна Чжана по программированию под Windows
- Интересные факты от Кристоффера
- Блог Марка Руссиновича
- Майк Столлс Блог об отладке .NET
- Блог Навина
- Никогда не сомневайся в своем отладчике (Карло)
- Заметки из темного угла
- Блог Ntdebugging (команда Microsoft Global Escalation Services)
- Найнив.Приключения в отладке Windows и реверс-инжиниринге
- Примечания разработчика PFE для данной области
- Команда отладчиков Visual Studio
- WinDbg от Фолькера фон Эйнема
Расширенные статьи и учебные ресурсы
- Расширенные методы отладки в WinDbg
- Отладка приложений для MS.Net и Windows (слайды Powerpoint)
- Отладка STL-контейнеров с помощью WinDbg
- Учебники по отладке 1–7 (CodeProject-Тоби Опферман)
- Отладка.tv
- Разработка или WinDBG Статьи с тегами
- Блог доктора Фу по безопасности - Учебные пособия по анализу вредоносных программ - Подход обратного проектирования
- Руководство по написанию эксплойтов, часть 5:Как модули и плагины отладчика могут ускорить разработку базовых эксплойтов
- Охота на руткиты
- Удаленная отладка ядра ОС Microsoft Windows Server с помощью утилиты Dell Windows Debugger Utility (DWDU) (Утилита отладчика DELL(TM) Windows(R) 1.1 README)
Альтернативные отладчики
- Боккен - (Ингума) (графический интерфейс для радара)
- БагДбг
- Отладка++ (еще не выпущен)
- Отладка
- Обесцвеченное кольцо 0 Отладчик (скачать)
- Эдб (Линукс)
- ФДБГ
- GoBug
- Hades (отладчик Ring 3 со стратегией обнаружения отладчика)
- Хоппер (Linux, OSX и Windows) (отладка Windows в настоящее время не реализована)
- Гипердбг
- Отладчик IDA
- ИммунитетОтладчик
- Наномит
- Obsidian (неинтрузивный отладчик)
- ОллиДБГ
- PEBпросмотреть
- ГонкаVB6 (Отладчик P-кода VB6)
- радар
- радар2уи (графический интерфейс для радара)
- Отладчик Rasta Ring 0 (РР0Д)
- Отладчик ядра Syser
- ТРВ 2000 (очень старый отладчик примерно W9x) + Архив плагинов Dions
- Отладчик VisualDux
- Винтрудер (расширяемый отладчик)
- WKTVDebugger (отладчик для Visual Basic P-Code) (скачать)
- x64_dbg
- Зета-отладчик
Другие ссылки
- Совместная библиотека инструментов RCE
- огромная коллекция инструментов отладчика и системного уровня - cr4zyserb
- огромная коллекция плагинов и других инструментов отладки - Как написать ссылки на отладчик Windows (Девон Стро)
- большая коллекция ссылок, дающих подробную информацию, которая вам понадобится, если вы захотите написать свой собственный отладчик, например.Формат файла PDB, форматы файлов .DMP, структура файла PE, способы записи трассировок стека и т. д. и т. п. - Tuts4You
- распаковщики, плагины IDA, OllyDBG, Immunity Debugger и т.д.
Это действительно широкий вопрос.
- Первым шагом является загрузка файла дампа в экземпляр WinDbg.
- Далее вам необходимо убедиться, что у вас настроены символы.
- Наконец, вы можете запустить команду
!analyze -v
чтобы провести базовый анализ.Чтобы сделать файлы дампа полезными, вам необходимо иметь доступную информацию о символах для вашего кода.
Веб-сайт Дамп памяти, отслеживание программного обеспечения, отладка, вредоносное ПО, вредоносное ПО и портал анализа разведывательных данных было очень информативно для меня.Мне тоже очень понравилась книга, Расширенная отладка Windows Марио Хьюардт и Даниэль Прават.
Тесс Феррандес отличный набор базовых руководств и лабораторных работ чтобы начать работу с Windbg.Я очень рекомендую их.