Программирование драйверов Windows

Анализ информации Crash Dump файлов


Когда происходит фатальный сбой системы, операционная система может (при определенных настройках системы) сохранить состояние системы в момент сбоя в файле на жестком диске. Чтобы это выполнялось, в апплете Пуск - Настройка - Панель Управления - Система - Дополнительно - Загрузка и восстановление - Параметры (рисунок 13.3) необходимо ввести приемлемые данные. Фиксирование состояние системы в момент сбоя позволит затем вернуться к анализу причин сбоя.

Рис. 13.3

Окно системного апплета для установки параметров crash dump файла

При помощи отладчика WinDbg можно проанализировать состояние системы в момент сбоя по содержимому crash dump файла. Там можно обнаружить всю информацию, которая была бы доступна отладчику, если бы он оказался включенным в момент сбоя. Это тип экспертизы позволяет добывать убедительные доказательства причин, приведших к фатальному сбою. Во время анализа необходимо установить:

  • Какой драйвер выполнялся в момент сбоя?
  • Какую операцию пытался выполнить драйвер в момент сбоя?
  • Каково содержимое структуры расширения объекта устройства в момент сбоя?
  • Какой объект устройства работал?
  • После запуска WinDbg необходимо открыть crash dump файл (полученный с целевого компьютера) для анализа, выбрав пункт меню File и затем Open Crash Dump. После выбора и загрузки необходимого файла, на экране появится информация следующего (например) типа:



    Windows XP Kernel Version 2600 UP Free x86 compatible Kernel base = 0x804d4000 PsLoadedModuleList = 0x8054be30 Bufcheck 000000Dl : 00000000 00000002 00000000 F8B57624 . . .

    Как видим, начальная информация показывает те же данные, что и сообщение экрана BSOD. Не должно вводить в заблуждение сообщение о не перехваченном исключении с кодом 0x80000003. Это точка прерывания, используемая собственно KeBugCheck

    для останова системы, поэтому не следует придавать ей значения.

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


    Loading Dump File [E:\SystemCrashDump\MEMORY.DMP] Kernel Dump File: Full address space is available

    Microsoft (R) Windows Kernel Debugger Version 3.0.0020.0 Copyright (c) Microsoft Corporation. All rights reserved.

    Loaded dbghelp extension DLL Loaded ext extension DLL Loaded exts extension DLL Loaded kext extension DLL Loaded kdexts extension DLL Symbol search path is: *** Invalid *** : Verify _NT_SYMBOL_PATH setting Executable search path is: ********************************************************************* * Symbols can not be loaded because symbol path is not initialized. * * * * The Symbol Path can be set by: * * using the _NT_SYMBOL_PATH environment variable. * * using the -y &#60symbol_path&#62 argument when starting the debugger. * * using .sympath and .sympath+ * ********************************************************************* *** ERROR: Symbol file could not be found. Defaulted to export symbols for ntoskrnl.exe - Windows XP Kernel Version 2600 (Service Pack 1) UP Free x86 compatible Built by: 2600.xpspl.020828-1920 Kernel base = 0x804d4000 PsLoadedModuleList = 0x8054be30 Debug session time: Fri Jun 13 02:20:17 2003 System Uptime: 0 days 3:15:59 ********************************************************************* * Symbols can not be loaded because symbol path is not initialized. * * * * The Symbol Path can be set by: * * using the _NT_SYMBOL_PATH environment variable. * * using the -y &#60symbol_path&#62 argument when starting the debugger. * * using .sympath and .sympath+ * *********************************************************************

    WaitForEvent failed WARNING: Stack unwind information not available. Following frames may be wrong. WARNING: Stack unwind information not available. Following frames may be wrong. ******************************************************************************* * * * Bugcheck Analysis * * * *******************************************************************************

    ***** Kernel symbols are WRONG.


    Please fix symbols to do bugcheck analysis. ******************************************************************************* * * * Bugcheck Analysis * * * ******************************************************************************* Bugcheck code 000000D1 Arguments 00000000 00000002 00000000 f8b57624

    ChildEBP RetAddr Args to Child WARNING: Stack unwind information not available. Following frames may be wrong. f2270b54 804dce53 0000000a 00000000 00000002 ntoskrnl!KeBugCheckEx+0xl9 f2270b70 00000000 00000000 00000000 00000000 ntoskrnl!Kei386EoiHelper+0x251c

    eax=ffdff13c ebx=0000000a ecx=00000000 edx=40000000 esi=f8b57624 edi=00000000 eip=805266db esp=f2270b3c ebp=f2270b54 iopl=0 nv up ei ng nz na po nc cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000286 ntoskrnl!KeBugCheckEx+19: 805266db 5d pop ebp

    Самой важной информацией, которую можно извлечь из приведенного выше набора строк &#8212 это код ошибочной ситуации (bugcheck code), равный 0x00D1. Остальные сведения, связанные с раскруткой стека вызовов в данной ситуации недоступны. Хотя именно данная информация особенно ценна в crash dump файлах.


    Содержание раздела