martes, diciembre 28, 2010

Azul Azul!!!!

Esa famosa pantallita que se ha hecho famosa y se asocia a Microsoft, pero según lo que me ha tocado ver, la gran mayoría de los casos se debe a otros culpables, tales como drivers o productos de terceros, pero el tema es lograr identificar quien fue el responsable de la caída inesperada y con ese dato, poder realizar las acciones necesarias para resolver la causa raíz.

Cuando ocurre la caída, el sistema guarda un DUMP de lo que estaba ocurriendo en ese momento, si es que la caída corresponde a un tema de software, en caso de un corte de energía el código de error es distinto y no queda DUMP.

Primero que nada debemos asegurarnos que estamos escribiendo un dump, si no lo tenemos difícilmente podremos realizar un análisis. Para validar esto vamos a My Computer, click con el botón derecho, Properties, en el tab Advanced, sección Startup and Recovery, click en el botón Settings. En la sección Write Debugging Information, asegurese que este seleccionado algun dump, ya sea el de Kernel o small y se encuentre el directorio donde será escrito el dump. También es buena practica que escriba un registro en el Log de Eventos, el cual será algo como lo siguiente:

Event Type:    Error
Event Source:    System Error
Event Category:    (102)
Event ID:    1003
Date:        12/20/2010
Time:        11:49:21 AM
User:        N/A
Computer:    SERVER

Description:
Error code 0000000a, parameter1 00000000, parameter2 d0000002, parameter3 00000001, parameter4 80828230.

NOTA: que para que pueda escribir el dump, es necesario que al menos una parte del archivo de paginación resida en la partición del sistema

Esto no nos dice mucho, el Error code nos ayudara a identificar si es problema de energía o de software, pero en el caso de software, nos queda el dump.

ok, ya tenemos el dump, como lo analizamos ahora??

Existe un juguetito llamado Windbg, el cual es parte de “Microsoft Debugging Tools”, el cual puede ser bajado desde Aquí. Al menos a mi me hizo también instalar el Framework .Net 4.0

Una vez instalado ejecutamos Windbg, antes de comenzar, debemos cargar los símbolos, esto es para ayudar al programa a identificar los distintos componentes que forman parte del dump. Para ello ir a File, Simbol File Path y agregar lo siguiente:

SRV*c:\symbols*http://msdl.microsoft.com/download/symbols

Click en OK.

Ahora estamos listos para leer nuestro dump, vamos a file, Open Crash Dump, seleccionamos el archivo de dump a analizar (Memory.dmp), nos pregunta si deseamos guardar la información en un workspace, le damos Yes, nos abre una pantalla blanca con información respecto al dump recién leído, esto es algo similar a lo siguiente:

Loading Dump File [C:\Users\xxxxx\Documents\dump\MEMORY.DMP]
Kernel Summary Dump File: Only kernel address space is available

WARNING: Whitespace at end of path element
Symbol search path is: SRV*c:\symbols*
http://msdl.microsoft.com/download/symbols

Executable search path is:
Windows Server 2003 Kernel Version 3790 (Service Pack 2) UP Free x86 compatible
Product: Server, suite: Enterprise TerminalServer SingleUserTS
Built by:
3790.srv03_sp2_gdr.100216-1301
Machine Name:
Kernel base = 0x80800000 PsLoadedModuleList = 0x8089ffa8
Debug session time: Sun Dec 19 14:41:05.155 2010 (UTC - 3:00)
System Uptime: 2 days 23:37:22.861
Loading Kernel Symbols
...............................................................
...............................................
Loading User Symbols
PEB is paged out (Peb.Ldr = 7ffd500c).  Type ".hh dbgerr001" for details
Loading unloaded module list
...
*********************************************
*                                                                             *
*                        Bugcheck Analysis                             *
*                                                                             *
*********************************************

Use !analyze -v to get detailed debugging information.

BugCheck A, {0, d0000002, 1, 80828230}

*** ERROR: Module load completed but symbols could not be loaded for fortimon2.sys
Probably caused by : fortimon2.sys ( fortimon2+4295 )

Followup: MachineOwner
---------

En BugCheck tenemos el error code entregado en el log de eventos y sus parámetros, y en Probably caused by: tenemos al sospechoso de la caída. Si queremos obtener mas detalles del problemas ejecutamos el siguiente comando en esa consola:

!analyze

**********************************************
*                                                                                        *
*                        Bugcheck Analysis                                    *
*                                                                                        *
**********************************************

IRQL_NOT_LESS_OR_EQUAL (a)
An attempt was made to access a pageable (or completely invalid) address at an
interrupt request level (IRQL) that is too high.  This is usually
caused by drivers using improper addresses.
If a kernel debugger is available get the stack backtrace.
Arguments:
Arg1: 00000000, memory referenced
Arg2: d0000002, IRQL
Arg3: 00000001, bitfield :
    bit 0 : value 0 = read operation, 1 = write operation
    bit 3 : value 0 = not an execute operation, 1 = execute operation (only on chips which support this level of status)
Arg4: 80828230, address which referenced memory

Debugging Details:
------------------
WRITE_ADDRESS:  00000000

CURRENT_IRQL:  2

FAULTING_IP:
nt!KeWaitForMultipleObjects+280
80828230 8902            mov     dword ptr [edx],eax

DEFAULT_BUCKET_ID:  DRIVER_FAULT

BUGCHECK_STR:  0xA

PROCESS_NAME:  cidaemon.exe

TRAP_FRAME:  b8b00814 -- (.trap 0xffffffffb8b00814)
ErrCode = 00000002
eax=8a9c75b0 ebx=00000003 ecx=8721a3dc edx=00000000 esi=8a9c7508 edi=8a9c7580
eip=80828230 esp=b8b00888 ebp=b8b008b4 iopl=0         nv up ei ng nz na po nc
cs=0008  ss=0010  ds=0023  es=0023  fs=0030  gs=0000             efl=00010282
nt!KeWaitForMultipleObjects+0x280:
80828230 8902            mov     dword ptr [edx],eax  ds:0023:00000000=????????
Resetting default scope

LAST_CONTROL_TRANSFER:  from 80828230 to 80886ad1

STACK_TEXT: 
b8b00814 80828230 badb0d00 00000000 f760f69c nt!KiTrap0E+0x2a1
b8b008b4 f760b295 00000003 b8b008e8 00000001 nt!KeWaitForMultipleObjects+0x280
WARNING: Stack unwind information not available. Following frames may be wrong.
b8b008fc f76084c0 8b1a55f0 810443e2 e404c298 fortimon2+0x4295
b8b00950 f723bb73 88ce4a14 00b00974 8a9b7720 fortimon2+0x14c0
b8b009b8 f723dfc2 00ce49b8 00000000 88ce49b8 fltmgr!FltpPerformPostCallbacks+0x1c5
b8b009cc f723e4f1 88ce49b8 87e5b008 b8b00a0c fltmgr!FltpProcessIoCompletion+0x10
b8b009dc f723eb83 8ae64c80 87e5b008 88ce49b8 fltmgr!FltpPassThroughCompletion+0x89
b8b00a0c f724c5de b8b00a2c 00000000 00000000 fltmgr!FltpLegacyProcessingAfterPreCallbacksCompleted+0x269
b8b00a48 8081d5c3 8ae64c80 87e5b008 87e5b008 fltmgr!FltpCreate+0x26a
b8b00a5c 808f100b b8b00c04 8b139de8 00000000 nt!IofCallDriver+0x45
b8b00b44 8092f806 8b139e00 00000000 848ec4b0 nt!IopParseDevice+0xa35
b8b00bc4 8092b946 00000000 b8b00c04 00000040 nt!ObpLookupObjectName+0x5b0
b8b00c18 808e2ed7 00000000 00000000 79654b01 nt!ObOpenObjectByName+0xea
b8b00c94 808e4171 0007dda8 00120089 0007dd6c nt!IopCreateFile+0x447
b8b00cf0 808e6c00 0007dda8 00120089 0007dd6c nt!IoCreateFile+0xa3
b8b00d30 80883948 0007dda8 00120089 0007dd6c nt!NtCreateFile+0x30
b8b00d30 7c82860c 0007dda8 00120089 0007dd6c nt!KiFastCallEntry+0xf8
0007dd9c 00000000 00000000 00000000 00000000 0x7c82860c


STACK_COMMAND:  kb

FOLLOWUP_IP:
fortimon2+4295
f760b295 2bc7            sub     eax,edi

SYMBOL_STACK_INDEX:  2

SYMBOL_NAME:  fortimon2+4295

FOLLOWUP_NAME:  MachineOwner

MODULE_NAME: fortimon2

IMAGE_NAME:  fortimon2.sys

DEBUG_FLR_IMAGE_TIMESTAMP:  4be9ce76

FAILURE_BUCKET_ID:  0xA_fortimon2+4295

BUCKET_ID:  0xA_fortimon2+4295

Followup: MachineOwner
---------

Con esto ya podemos ver cual fue la causa y el modulo que la provoco, en nuestro caso fue un acceso a una dirección de memoria que no correspondía, el detalle se puede observar en el stack text y el resto de la información.

Espero que les sirva como me sirvió a mi.

Saludos!!

Isa

No hay comentarios.: