Ну вот случилось у нас, к примеру, несчастье. Нехороший windows вывалился в BSOD – blue screen of death. Что? Почему? Как это? Самый трезывый из этих вопрос: из-за чего?
Видим, к примеру, строку PAGE_FAULT_IN_NONPAGED_AREA, что нам с ней дальше делать? А какой это драйвер глюканул? А может и не драйвер вовсе?
Мелкософт для анализа подобных ситуаций предоставляет инструмент для отладки: WinDbg, который у них и доступен для бесплатного скачивания около 13,8Мб. Тут надо оговориться, что для полного счастья этому дебаггеру не будет хватать библиотек виндовых symbols (который на самом-то деле и весит примерно 130Мб).
По умолчанию нехороший виндовс делает два дампа: большой, и маленький. Большой дамп содержит всю используемую в момент ошибки память и находится в корне системы, это MEMORY.DMP, маленький дамп тоже подходит для анализа, и обнаружить все выпущенные системой минидампы можно в c:\windows\minidump\, типичное имя файла – Mini011106-14.dmp, дата, номер.
Открываем в windbg из меню как показано на скриншоте.
Загружается дамп и выводит почти пригодную информацию для осознания случившегося.
Рекомендую скачать символьную базу для x86 XP, 2003 архитектур и подключить в бебаггере указав правильные пути.
В командной строке дебаггера запускаем команду !analyze -v и получаем еще более детальный отчет, который я и привожу ниже.
В частности из анализа этого дампа можно сделать вывод о том, что ошибка возникла на системном уровне, вследствие переполнения стека. Виновником является что-то низкоуровневое. Способ побороть – писать в Microsoft и ждать хотфикс.
———————————————
Microsoft (R) Windows Debugger Version 6.6.0003.5
Copyright (c) Microsoft Corporation. All rights reserved.
Loading Dump File [C:\MEMORY.DMP]
Kernel Summary Dump File: Only kernel address space is available
Symbol search path is: C:\WINDOWS\Symbols
Executable search path is:
Windows Server 2003 Kernel Version 3790 (Service Pack 1) MP (2 procs) Free x86 compatible
Product: Server, suite: Enterprise TerminalServer
Built by: 3790.srv03_sp1_rtm.050324-1447
Kernel base = 0×80800000 PsLoadedModuleList = 0x808af988
Debug session time: Mon Feb 6 18:04:31.040 2006 (GMT+2)
System Uptime: 0 days 7:52:05.481
Loading Kernel Symbols
……………………………………………………………………………………………………
Loading User Symbols
PEB is paged out (Peb.Ldr = 7ffdc00c). Type “.hh dbgerr001″ for details
Loading unloaded module list
………
*******************************************************************************
* *
* Bugcheck Analysis *
* *
*******************************************************************************
Use !analyze -v to get detailed debugging information.
BugCheck 50, {fdffa9f8, 0, 8089b522, 0}
Probably caused by : ntkrnlmp.exe ( nt!ExFreePoolWithTag+28b )
Followup: MachineOwner
———
0: kd> !analyze -v
*******************************************************************************
* *
* Bugcheck Analysis *
* *
*******************************************************************************
PAGE_FAULT_IN_NONPAGED_AREA (50)
Invalid system memory was referenced. This cannot be protected by try-except,
it must be protected by a Probe. Typically the address is just plain bad or it
is pointing at freed memory.
Arguments:
Arg1: fdffa9f8, memory referenced.
Arg2: 00000000, value 0 = read operation, 1 = write operation.
Arg3: 8089b522, If non-zero, the instruction address which referenced the bad memory
address.
Arg4: 00000000, (reserved)
Debugging Details:
——————
READ_ADDRESS: fdffa9f8 Nonpaged pool expansion
FAULTING_IP:
nt!ExFreePoolWithTag+28b
8089b522 668b4602 mov ax,[esi+0x2]
MM_INTERNAL_CODE: 0
DEFAULT_BUCKET_ID: INTEL_CPU_MICROCODE_ZERO
BUGCHECK_STR: 0×50
CURRENT_IRQL: 1
LAST_CONTROL_TRANSFER: from 808689ee to 8087b6be
STACK_TEXT:
abd37abc 808689ee 00000050 fdffa9f8 00000000 nt!KeBugCheckEx+0x1b
abd37b0c 80837d0a 00000000 fdffa9f8 00000000 nt!MmAccessFault+0×813
abd37b0c 8089b522 00000000 fdffa9f8 00000000 nt!KiTrap0E+0xdc
abd37be4 8093aeba fdffa9fe 00000000 e3b6d188 nt!ExFreePoolWithTag+0x28b
abd37c00 8091a265 e3b6d188 00000d80 abd37c3c nt!CmpCleanUpKcbValueCache+0×51
abd37c10 8097b9ca e3b6d188 8ad3e801 00000000 nt!CmpCleanUpKcbCacheWithLock+0×15
abd37c3c 8097ba85 005e8368 8ad3e801 e3dc24b0 nt!CmpCleanUpKCBCacheTable+0×110
abd37c68 8097a4a1 e25e8368 00000000 8ad3e801 nt!CmpSearchForOpenSubKeys+0×36
abd37ca0 809765d0 e3dc29f8 00000000 01000003 nt!CmUnloadKey+0xb2
abd37d48 80977be6 0185f764 00000000 abd37d64 nt!NtUnloadKey2+0×212
abd37d58 80834d3f 0185f764 0185f77c 7c82ed54 nt!NtUnloadKey+0xf
abd37d58 7c82ed54 0185f764 0185f77c 7c82ed54 nt!KiFastCallEntry+0xfc
WARNING: Frame IP not in any known module. Following frames may be wrong.
0185f77c 00000000 00000000 00000000 00000000 0x7c82ed54
STACK_COMMAND: .bugcheck ; kb
FOLLOWUP_IP:
nt!ExFreePoolWithTag+28b
8089b522 668b4602 mov ax,[esi+0x2]
FAULTING_SOURCE_CODE:
SYMBOL_STACK_INDEX: 3
FOLLOWUP_NAME: MachineOwner
SYMBOL_NAME: nt!ExFreePoolWithTag+28b
MODULE_NAME: nt
IMAGE_NAME: ntkrnlmp.exe
DEBUG_FLR_IMAGE_TIMESTAMP: 42435e60
FAILURE_BUCKET_ID: 0x50_nt!ExFreePoolWithTag+28b
BUCKET_ID: 0x50_nt!ExFreePoolWithTag+28b
Followup: MachineOwner
———
Источник: it-expert.com.ua