Как использовать WinDbg для анализа аварийного дампа для приложения VC++?
Как использовать WinDbg для анализа файла дампа?
4 ответов
вот некоторые общие шаги, которые помогут вам на вашем пути:
во-первых, вы должны изменить настройки компилятора, чтобы он создавал PDB-файлы, даже для сборок выпуска. Более поздние версии Visual C++ компилятор делает это по умолчанию, но во многих версиях Visual C++ вы должны сделать это сами. Создайте файлы базы данных программы, а затем сохраните архив этих файлов вместе с каждой сборкой вашего приложения. Важно, чтобы каждая сборка ваших приложений имеет свой собственный набор PDBs. Вы не можете просто повторно использовать те же самые, которые вы сделали со сборкой 10 для изучения дампов, созданных сборкой 15, например. В течение жизни вашего проекта вы получите тонну PDBs, поэтому будьте готовы к этому.
Далее, вы должны иметь возможность определить точную версию вашего приложения, которое сгенерировало файл дампа. Если вы создаете свои собственные MiniDumps (путем вызова MiniDumpWriteDump() например), пожалуй, самый простой способ сделать это это просто сделать часть имени файла MiniDump полным номером версии вашего приложения. Для этого вам понадобится разумная схема нумерации версий. В моем магазине мы увеличиваем номер сборки во всех ветвях по одному каждый раз, когда autobuilder создает сборку.
теперь, когда вы получили файл дампа от клиента, вы знаете точную версию приложения, которое создало дамп, и вы нашли файлы PDB для этого строить.
теперь вам нужно пройти через историю вашего управления версиями и найти исходный код для этой точной версии программного обеспечения. Лучший способ сделать это-применять "метки" к вашим ветвям каждый раз, когда вы делаете сборку. Установить значение метки на точный номер версии, и ее будет легко найти в истории.
вы почти готовы запустить WinDbg / Visual C++:
- получите полное исходное дерево для этой версии вашего приложения. Поместите его в отдельное место на жестком диске, скажем
c:\app_build_1.0.100
для версии приложения 1.0 build #100. - получите двоичные файлы для этой точной версии вашего приложения и поместите их где-нибудь на жесткий диск. Проще всего установить эту версию приложения, чтобы получить двоичные файлы.
- поместите файлы PDB в то же место, что и двоичные файлы на Шаге 2.
теперь у вас есть два варианта просмотра файла дампа. Вы можете использовать Visual Studio или WinDbg. Использование Visual Studio проще, но WinDbg намного мощнее. Большую часть времени будет достаточно функциональности в Visual Studio.
использовать Visual Studio, все, что вам нужно сделать, это открыть файл дампа как это проект. После открытия "запустите" файл дампа (Ф5 по умолчанию) и если все пути указаны правильно, он приведет вас прямо к коду, который разбился, даст вам стек вызовов и т. д.
для использования 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 доставит вас прямо к месту твоя авария. На данный момент у вас есть миллион вариантов для глубокого копания в пространстве памяти вашего приложения, состояние критических разделов, окон и т. д. Но это путь выходит за рамки этого поста.
удачи!
(см. разделы "дамп" ниже)
основные учебники и демонстрации использования WinDbg
- установка и настройка WinDbg (Windows Debug Tools)
- Майк Таулти-слово для WinDBG
- Обучающие Программы WinDbg
- Отладчики Windows: Часть 1: Учебник WinDbg
различные способы "запуска" / присоединения Программы WinDbg
- начать отладку с Windbg (включает в себя, как отлаживать.msi)
- как отладить службу Windows
- настройка отладки Windows
рабочие
понимание того, как работают рабочие области...
- Pimp up your debugger: создание пользовательского рабочего пространства для отладки windbg
- Раскрытие Работы Рабочих Пространств в WinDbg
Cmdtree
" cmdtree "позволяет определить" меню " команд отладчика для легкого доступа к часто используемым командам без необходимости запоминать краткие имена команд.
вам не нужно помещать все определения команд в один и тот же текстовый файл cmdtree....вы можете держать их отдельно и загружать несколько, если хотите (затем они получают свое собственное окно).
- удивительный помощник .cmdtree
- как сделать док-станцию окна cmdtree при запуске в WinDBG
- упрощение отладки дампов .net в windbg с помощью .cmdtree
- Microshaoft Cmdtree
- специальная команда-выполнение команд из настраиваемого пользовательского интерфейса .cmdtree
Запуск Скрипта
вы можете использовать параметр-c в командной строке для автоматического запуска Сценарий WinDBG при запуске WinDBG.
дает возможность включить режим DML (язык разметки отладчика), загружать определенные расширения, устанавливать точки останова исключений .NET, устанавливать флаги ядра (например, при отладке ядра вам может потребоваться изменить маску DbgPrint, чтобы вы видели информацию трассировки....Эд НТ!Значение 0xFFFFFFFF Kd_DEFAULT_Mask), 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:\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
Командные Шпаргалки
- анализ аварийного дампа плакат v3.0
- шпаргалка SOS (.NET 2.0/3.0/3.5)
- шпаргалка WinDbg (Art of Dev)
- WinDbg Расширение Режима Ядра Команды Карточки
расширения
"расширения" позволяют расширьте диапазон команд / функций, поддерживаемых внутри WinDBG.
-
bigLasagne (bldbgexts & blwdbgue)
- подсветка синтаксиса сборки и инструмент отображения драйверов)
-
Считыватель Чисел BigLib
-
Byakugan
- обнаружение методов антидебуггинга, визуализации/эмуляции кучи vista, буферов трека в память!--127-->
-
Анализатор Потока Вызовов + KnExt
-
CmdHist
- записывает каждую команду, выполненную в сеансе отладки, чтобы вы могли легко выполнить
-
Ядро Анализатора
- проверьте структуры кучи на коррупцию, обнаружьте объекты, разделяемые потоками и т. д.
-
расширение dom WinDBG
- (!stlpvector, !ИДТ !unhex, !грэп и т. д.)
-
dumppe
- сбрасывает PE-файл из памяти
-
Расширение Просмотра Изображений (Владимир Вукичевич)
-
Intel UEFI Development Kit отладчик инструмент
- отладка прошивки UEFI
-
leaktrap
- отслежыватель ручки гди/потребителя для помощи в утечке обнаружение
-
Мона (требуется PyKD)
- набор команд, чтобы помочь в расширенном анализе / найти эксплойты
-
MSEC
- обеспечивает автоматизированный анализ аварии и оценку риска для безопасности
-
хорошая
- перечисляет информацию о загруженных модулях, таких как SafeSEH, ASLR, DEP, /GS (безопасность буфера Чеки)
-
netext (Родни Виана)
- (!wservice-список объектов Службы WCF,!wconfig - шоу .config lines,!whttp-список HttpContexts,!wselect/!wfrom-поддержка SQL как запросов на массивы)
-
ODbgExt
- открыть расширения отладчика
-
OllyMigrate
- передать отлаживаемой программы в другую без отладчика перезапуск
-
Psscor2
- надмножество SOS для помощи в отладке управляемого кода .NET 2.0
-
Psscor4
- надмножество SOS для помощи в отладке управляемого кода .NET 4
-
PyDBGExt
- позволяет использовать скрипты python
-
PyKD
- позволяет Python быть используется для скрипта WinDBG
-
sdbgext (Nynaeve)
-(!valloc, !vallocrwx, !heapalloc, !heapfree, !remotecall в, !remotecall64,!loaddll, !unloaddll, !близко !killthread,!adjpriv, !ret)
-
SieExtPub
-расширение legacy...теперь встроенный в WinDBG в ext.dll файлы
-
SOSEX
- дополнительные команды для отладки управляемой сети 2.0 или 4.0 код
-
SPT / SDBGExt2 (Steve Niemitz)
- (!DumpHttpContext,!DumpASPNetRequests,!DumpSqlConnectionPools,!DumpThreadPool и т. д.)
-
Uniqstack
- источник расширения отладчика (для доступа к нему требуется учетная запись OSR Online)
-
viscope
- график покрытия кода
-
Цепи Ждать Обход/ДАП.dll (расширения отладки Codeplex
- отображение цепочек ожидания потоков приложений (помогает найти взаимоблокировок)
-
windbgshark
- интегрирует анализатор протокола Wireshark для того чтобы включить манипуляцию и анализ движения VM
-
Расширения WinDBG (Саша Гольдштейн)
- Tracer, WCT, heap_stat, bkb, traverse_map, traverse_vector)
-
Выделить Программы WinDbg (ColorWindbg.dll) [используйте Google Translate для перевода ссылки]
- подсветка синтаксиса asm
напишите свое собственное расширение
- инструменты торговли: Часть IV-разработка DLL расширения WinDbg
- основы расширений отладчика: краткосрочные усилия, долгосрочный выигрыш
использование WinDBG для отладки Управляемый Код
- нарушение исключения
- нарушение на конкретном исключении CLR
- отладка исходного кода .Net framework в Windbg
- отладка исключений в управляемом коде с помощью Windbg
- отладка управляемого кода с помощью WinDbg и SOS.dll файлы
- отладка в WinDbg. Тупики в Приложения.
- управляемая отладка с помощью WINDBG. Введение и индекс
- установка точек останова .NET в Windbg для приложений, которые сбой при запуске
сценарии (C#, PS, Python, WinDBG)
-
KDAR (отладчик ядра Anti Rootkit)
- коллекция скриптов WinDBG
-
Sysnative BSOD Скрипты / обработка Приложения
-
WinDBG библиотека сценариев
- коллекция скриптов WinDBG
-
сценарии MDbg и DbgHostLib
- позволяет управляемому коду писать управляемый отладчик (MDBG) и DbgEng
-
ExtCS
- позволяет управлять WinDBG через скрипты c#
-
PowerDBG
- позволяет управление WinDBG с помощью сценариев Powershell
-
Pykd
- позволяет управлять WinDBG через скрипты Python
-
windbglib
- библиотека оболочки python вокруг расширения pykd для WinDBG, имитирующая immlib (поэтому вы можете использовать сценарии, первоначально написанные для отладчика иммунитета)
Отладчики / инструменты, использующие dbgeng.библиотеки DLL с API/программы WinDbg Инструменты
- Простой Отладчик Пользовательского Режима На Основе Dbgeng
- желуди.Отладка NET Deadlock Detector (использует cdb.EXE-файл) (скачать)
- управляемый отладчик CLR (MDBG)
- DbgHost-как управлять отладочным движком
- отладка диагностического инструмента v1.2 (DebugDiag), Вер 2.0 + DebugDiag Блог
- Dynamorio - динамический бинарный инструмент инструментирования, который может взаимодействовать с WinDBG
- Мар + плагин программы WinDbg
- GUI WinDBG
- LeakShell (найти управляемой утечки)
- mdbglib-управляемый API отладки
-
PyDbgEng
- оболочка python для отладки Windows Двигатель - соснет - вилка WinDBG / альтернативная оболочка, которая концентрируется на использовании расширения SOS и поддерживает сценарии C#
- соснет О2 вилка - вилка SOSNET, которая использует Rosyln для скриптового движка C# REPL (read-eval-print-loop)
- VDB / Vivisect (kenshoto)-обеспечивает кросс-платформенный API отладки на уровне WinDBG
- WinAppDbg + Heappie-WinAppDbg
- написание базового отладчика Windows
различные способы создания файлов аварийного дампа для посмертного анализа
- DebugDiag 2.0
-
Дамп Шпаргалка
- включает в себя создание дампа из виртуальных машин Hyper-V, VMWare ESX и XenServer. - Citrix SystemDump
- Нажатие Клавиши Клавиатуры Комбинация
-
MiniDumpWriteDump
- (через вызов WIN32 API внутри вашего приложения). (пример для приложений c#) -
переключатель NMI или (здесь)
(аппаратная функция для создания NMI...обычно встречается на серверах высокого класса, например HP или вы можете получить надстройку PCI card "универсальный переключатель дампа PCI"). Технология Microsoft NMI фон. - Procdump
-
система / расширенные Системные настройки / запуск и восстановление
(информация о реестре),
(как настроить полный (полный) дамп памяти),
(как включить полный дамп памяти),
(как включить полный дамп памяти на Windows 7, когда ПК имеет много памяти...нормально не доступный когда больше чем 2ГБ память!--8-->) - Диспетчер Задач "Создать Файл Дампа"
- UserDump, - инструкции (очень старый инструмент)
- UserModeProcessDumper, - инструкции
- Visual Studio " Сохранить Дамп Как..."
- WER (отчеты об ошибках Windows....местные свалки)
- программы WinDbg
Анализ Дампа Инструменты
- BlueScreenView - находит минидампа .DMP файлы, сохраненные Windows после BSOD, и извлекает информацию о том, что вызвало кризис
- "отладка".Анализатор (можно анализировать файлы дампа и плагины могут быть написаны в .NET)
- SAD-простой после сброса (анализатор посмертно)
- волатильность - фреймворк для анализа "памяти", записанной в файлах дампа (чит лист)
дамп связанные инструменты
- Citrix dumpcheck-проверяет согласованность файла дампа (похоже, он был заброшен ссылке + ссылке)
- программа dumpchk (часть инструментов отладки) - проверяет согласованность файла дампа
- MoonSols Windows Memory Toolkit (ранее windd) - преобразует различные файлы дампа raw памяти в WinDBG совместимый dmp файлы
- vm2dmp - Microsoft Hyper-V VM состояние памяти дамп конвертер
- vmss2core - преобразует файл моментального снимка VMWare в файл дампа ядра (скачать), ( - инструкции)
Ядро Отладки Виртуальных Машин
- VMKD - расширения виртуальной машины KD
- VirtualKD - (поддержка отладчика ядра для ОС, размещенной в Компания VMware/VirtualBox И)
видео
- .NET Cracking 101 #2-основы WinDbg
- отладка .NET для производственной среды (Channel9)
- dotnetConf-Расширенная отладка с WinDbg и SOS
- David Truxall "отладка с WinDBG"
- Майк Таулти Отладка Утечек Памяти
- сессия oredev 2009: Отладка приложений .NET с помощью WinDbg
-
Расширенная Отладка Windows Pluralsight
(плюс различные другие в Pluralsight) - Тесс Феррандес Виндбг (Channel9)
блоги
некоторые блоги (смесь отладки собственного и управляемого кода).
- Расширенная отладка .NET
- Вся Ваша База Принадлежит Нам (Саша Гольдштейн)
- "анализ" -в
- ASP.NET отладка
- Cyberiafreak (threading и расширенный Windows prog и отладки)
- Отладка Analyzer.NET
- Debug and Beyond
- Отладки Экспертов Журнал Онлайн
- Отладка Toolbox (скрипты Windbg, инструменты отладки и устранения неполадок и методы, помогающие изолировать проблемы с программным обеспечением.)
- расшифровать мой мир
- greggm в блог
- примечания по программированию Windows Junfeng Zhang
- лакомые кусочки Кристоффера
- блог Марка Русиновича
- Майк киосков .NET блог отладки
- блог Навина
- Никогда Не Сомневайся Отладчик (Карло)
- заметки из темного угла
- Блог Ntdebugging (Microsoft Global Escalation Services team)
- Найнив. Приключения в отладке Windows и обратной инженерии
- Примечания разработчика PFE для поля
- Команда Отладчика Visual Studio
- WinDbg по Volker von Эйнем!--8-->
дополнительные статьи и учебные ресурсы
- передовые методы отладки в WinDbg
- отладка приложений для MS.Net и Windows (PowerPoint слайды)
- отладка контейнеров STL с WinDbg
- Учебники По Отладке 1-7 (CodeProject-Toby Opferman)
- Debugging.tv
- Developmentor WinDBG помеченные статьи
- блог безопасности Dr Fu - анализ вредоносных программ учебники-обратный инженерный подход
- Exploit написание учебника часть 5: как модули и плагины отладчика могут ускорить базовое развитие эксплойта
- Охота На Руткитов
- Удаленная Microsoft Windows Отладка ядра ОС сервера с помощью утилиты Dell Windows Debugger Utility (DWDU) (Dell(TM) Windows (R) утилита отладчика 1.1 README)
Альтернативные Отладчики
- боккен - (Inguma) (GUI для radare)
- BugDbg
- Debug++ (еще не выпущен)
- Debuggy
- Обесцвеченное Кольцо 0 Отладчик (скачать)
- edb (Linux)
- FDBG
- GoBug
- Аид (отладчик кольца 3 с анти-стратегией обнаружения отладчика)
- бункер (Linux, OSX и Windows) (отладка Windows в настоящее время не реализована)
- Hyperdbg
- IDA Отладчик
- ImmunityDebugger
- Nanomite
- Obsidian (неинтрузивный отладчик)
- OllyDBG
- PEBrowse
- RaceVB6 (отладчик P-кода VB6)
- радаре
- radare2ui (GUI для radare)
- Отладчик Rasta Ring 0 (RR0D)
- Отладчик Ядра Syser
- TRW 2000 (очень старый отладчик около W9x) + архив плагинов dions
- Отладчик VisualDux
- Wintruder (выдвижная отладчик)
- WKTVDebugger (отладчик для P-кода Visual Basic) (скачать)
- x64_dbg
- Зэта Отладчик
Другие Ссылки
-
совместная библиотека инструментов RCE
- огромная коллекция инструментов отладчика и системного уровня -
cr4zyserb
- огромная коллекция плагинов и других инструментов отладки -
Как написать ссылки на отладчик Windows (Devon Straw)
- большая коллекция ссылок дает вам подробную информацию, которая вам понадобится, если вы хотите чтобы написать свой собственный отладчик, например, формат файла PDB, .Форматы файлов DMP, структура файлов PE, как записывать трассировки стека и т. д. -
Tuts4You
- анпакер, в IDA, OllyDBG, отладчик иммунитет плагины и т. д.
Это очень широкий вопрос.
- первым шагом является загрузка файла дампа в экземпляр WinDbg.
- Далее, вы должны убедиться, что у вас есть настройки символов.
- наконец, вы можете выполнить команду
!analyze -v
чтобы получить базовый анализ, выполненный на нем. Вам нужно иметь информацию о символах, доступную для вашего кода, чтобы сделать файлы дампа стоящими.
сайте Дамп Памяти, Трассировка Программного Обеспечения, Отладка, Вредоносное ПО, Victimware и портал анализа интеллекта был очень информативным для меня. Мне также очень понравилась книга, Расширенная Отладка Windows Марио Hewardt и Даниэль Pravat.
Тесс Ferrandez имеет большой набор основных учебных пособий и лабораторий чтобы начать работу с Windbg. Я очень рекомендую их.