Как я могу прочитать сгенерированный BSOD Windows memory.dmp с помощью переполнения стека

Мне нужно прочитать информацию, код, флаги, адрес и т. Д. Из файла memory.dmp, сгенерированного из Windows BSOD через C ++. Основная идея заключается в том, что информация о состоянии может быть запрошена с удаленного сайта, а одна из запрашиваемых частей информации — это некоторая базовая информация с последнего BSOD, произошедшего на компьютере, поэтому мне нужно открыть файл дампа ядра / памяти через C ++ (Im используя MSVC 2005).

1

Решение

Начни здесь, тогда понять, что с помощью скриптовых команд в WinDBG гораздо проще.

Примечание: вам нужна только WinDBG на анализирующей машине, а не сбойная. Вы извлекаете минидамп и анализируете его внешне. Единственная трудность, с которой вы столкнетесь, — это получение правильных символов — для Windows Microsoft делает их доступными через свои серверы символов, но приложения, вызвавшие сбой, могут не предоставлять нужные вам символы. Если они являются вашими собственными приложениями, вызывающими сбой, получите сервер символов и используйте его.

1

Другие решения

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

На XP это было 64KB на моем Win8.1 x64 это 256KB. Эти файлы хорошо сжимаются. Вы должны быть в состоянии обойтись с zip-файлом размером 10-60 КБ в зависимости от разрядности ОС. Если пропускная способность имеет первостепенное значение для вас, вы можете использовать 7z который сжимает примерно на 50% лучше, чем обычный zip-алгоритм, за счет гораздо более длительного времени сжатия (на 5-6 дольше), но для таких небольших файлов разница во времени ЦП должна быть несущественной.

Если вы не хотите, чтобы ваши пользователи настраивали создание отчетов о дампах, вам нужно установить DWORD

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl

до 3 для небольшого дампа ядра программно.

Для объяснения значений см. http://technet.microsoft.com/en-us/library/cc976050.aspx

  • 0 Отладочная информация не записывается в файл.
  • 1 Полный аварийный дамп записывается в файл.
  • 2 Дамп памяти ядра записывается в файл.
  • 3 Небольшой дамп памяти записывается в файл.

По умолчанию вы получите небольшой дамп ядра в% SystemRoot% \ MEMORY.DMP.

0