Как использовать WinDbg для анализа аварийного дампа для приложения VC++?

Как использовать WinDbg для анализа файла дампа?

4 ответов


вот некоторые общие шаги, которые помогут вам на вашем пути:

во-первых, вы должны изменить настройки компилятора, чтобы он создавал PDB-файлы, даже для сборок выпуска. Более поздние версии Visual C++ компилятор делает это по умолчанию, но во многих версиях Visual C++ вы должны сделать это сами. Создайте файлы базы данных программы, а затем сохраните архив этих файлов вместе с каждой сборкой вашего приложения. Важно, чтобы каждая сборка ваших приложений имеет свой собственный набор PDBs. Вы не можете просто повторно использовать те же самые, которые вы сделали со сборкой 10 для изучения дампов, созданных сборкой 15, например. В течение жизни вашего проекта вы получите тонну PDBs, поэтому будьте готовы к этому.

Далее, вы должны иметь возможность определить точную версию вашего приложения, которое сгенерировало файл дампа. Если вы создаете свои собственные MiniDumps (путем вызова MiniDumpWriteDump() например), пожалуй, самый простой способ сделать это это просто сделать часть имени файла MiniDump полным номером версии вашего приложения. Для этого вам понадобится разумная схема нумерации версий. В моем магазине мы увеличиваем номер сборки во всех ветвях по одному каждый раз, когда autobuilder создает сборку.

теперь, когда вы получили файл дампа от клиента, вы знаете точную версию приложения, которое создало дамп, и вы нашли файлы PDB для этого строить.

теперь вам нужно пройти через историю вашего управления версиями и найти исходный код для этой точной версии программного обеспечения. Лучший способ сделать это-применять "метки" к вашим ветвям каждый раз, когда вы делаете сборку. Установить значение метки на точный номер версии, и ее будет легко найти в истории.

вы почти готовы запустить WinDbg / Visual C++:

  1. получите полное исходное дерево для этой версии вашего приложения. Поместите его в отдельное место на жестком диске, скажем c:\app_build_1.0.100 для версии приложения 1.0 build #100.
  2. получите двоичные файлы для этой точной версии вашего приложения и поместите их где-нибудь на жесткий диск. Проще всего установить эту версию приложения, чтобы получить двоичные файлы.
  3. поместите файлы PDB в то же место, что и двоичные файлы на Шаге 2.

теперь у вас есть два варианта просмотра файла дампа. Вы можете использовать Visual Studio или WinDbg. Использование Visual Studio проще, но WinDbg намного мощнее. Большую часть времени будет достаточно функциональности в Visual Studio.

использовать Visual Studio, все, что вам нужно сделать, это открыть файл дампа как это проект. После открытия "запустите" файл дампа (Ф5 по умолчанию) и если все пути указаны правильно, он приведет вас прямо к коду, который разбился, даст вам стек вызовов и т. д.

для использования WinDbg, вы придется прыгать через несколько обручей:

  1. Запустить WinDbg
  2. открыть файл дампа. (Ctrl + D по умолчанию)
  3. скажите WinDbg, чтобы получить правильные файлы символов MicroSoft. Тип .symfix. Это может занять несколько минут, так как это вытащит тонну вещей из интернета.
  4. сообщите WinDbg, где находятся символы (PDB-файлы). Тип .sympath+ c:\pdblocation, подставляя везде, где вы помещаете PDB-файлы для пути. Делать конечно, вы получите знак плюса там без пробелов между .sympath и + подпишите, иначе вы испортите Шаг 3.
  5. скажите WinDbg, где находится исходный код. Тип .srcpath c:\app_build_1.0.100 замена пути, по которому вы получили код из системы управления версиями для этой версии программного обеспечения.
  6. скажите WinDbg проанализировать файл дампа. Тип !analyze -v

через несколько минут, если все настроено правильно, WinDbg доставит вас прямо к месту твоя авария. На данный момент у вас есть миллион вариантов для глубокого копания в пространстве памяти вашего приложения, состояние критических разделов, окон и т. д. Но это путь выходит за рамки этого поста.

удачи!


(см. разделы "дамп" ниже)

основные учебники и демонстрации использования WinDbg

различные способы "запуска" / присоединения Программы WinDbg

рабочие

понимание того, как работают рабочие области...

Cmdtree

" 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

Командные Шпаргалки

расширения

"расширения" позволяют расширьте диапазон команд / функций, поддерживаемых внутри 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

напишите свое собственное расширение

использование WinDBG для отладки Управляемый Код

сценарии (C#, PS, Python, WinDBG)

Отладчики / инструменты, использующие dbgeng.библиотеки DLL с API/программы WinDbg Инструменты

различные способы создания файлов аварийного дампа для посмертного анализа

Анализ Дампа Инструменты

дамп связанные инструменты

  • Citrix dumpcheck-проверяет согласованность файла дампа (похоже, он был заброшен ссылке + ссылке)
  • программа dumpchk (часть инструментов отладки) - проверяет согласованность файла дампа
  • MoonSols Windows Memory Toolkit (ранее windd) - преобразует различные файлы дампа raw памяти в WinDBG совместимый dmp файлы
  • vm2dmp - Microsoft Hyper-V VM состояние памяти дамп конвертер
  • vmss2core - преобразует файл моментального снимка VMWare в файл дампа ядра (скачать), ( - инструкции)

Ядро Отладки Виртуальных Машин

  • VMKD - расширения виртуальной машины KD
  • VirtualKD - (поддержка отладчика ядра для ОС, размещенной в Компания VMware/VirtualBox И)

видео

блоги

некоторые блоги (смесь отладки собственного и управляемого кода).

дополнительные статьи и учебные ресурсы

Альтернативные Отладчики

Другие Ссылки

  • совместная библиотека инструментов RCE
    - огромная коллекция инструментов отладчика и системного уровня
  • cr4zyserb
    - огромная коллекция плагинов и других инструментов отладки
  • Как написать ссылки на отладчик Windows (Devon Straw)
    - большая коллекция ссылок дает вам подробную информацию, которая вам понадобится, если вы хотите чтобы написать свой собственный отладчик, например, формат файла PDB, .Форматы файлов DMP, структура файлов PE, как записывать трассировки стека и т. д.
  • Tuts4You
    - анпакер, в IDA, OllyDBG, отладчик иммунитет плагины и т. д.

Это очень широкий вопрос.

  1. первым шагом является загрузка файла дампа в экземпляр WinDbg.
  2. Далее, вы должны убедиться, что у вас есть настройки символов.
  3. наконец, вы можете выполнить команду !analyze -v чтобы получить базовый анализ, выполненный на нем. Вам нужно иметь информацию о символах, доступную для вашего кода, чтобы сделать файлы дампа стоящими.

сайте Дамп Памяти, Трассировка Программного Обеспечения, Отладка, Вредоносное ПО, Victimware и портал анализа интеллекта был очень информативным для меня. Мне также очень понравилась книга, Расширенная Отладка Windows Марио Hewardt и Даниэль Pravat.


Тесс Ferrandez имеет большой набор основных учебных пособий и лабораторий чтобы начать работу с Windbg. Я очень рекомендую их.