miércoles, 2 de febrero de 2011

Debugging II Parte

Después de la pequeña introducción en la I parte, vamos a hablar en esta II parte de la instalación, configuración y el uso de esta herramienta.
Descargar e instalar la herramienta del siguiente Link una vez instalada vamos a pasar a la configuracion de la misma para que se descargue los symbols y entramos en File>Symbol File Path... o con Ctrl+S y se nos abrirá esta misma ventana :




Donde tenemos que añadir el siguiente comando con la url de los symbols para que se lo descargue:
SRV*c:\websymbols*http://msdl.microsoft.com/download/symbols
Pero antes tendríamos que crear un directorio en C$ con el mismo nombre "websymbols" o poner el nombre que os convengan, en mi caso es el mismo "websymbols". Una vez que ya hemos creado el directorio,

le pegamos toda la linea, pulsamos OK y quedara de asi:



Una vez que ya tenemos esta parte hecha ya podemos abrir el  archivo .dmp (DUMP) en  File>Open Crash Dump y cuando se abre la ventana tenemos que ir a  %systemroot%\Minidump (en este directorio el sistema guarda los volcados de memoria) para seleccionar el archivo .dmp.
Se abrirá el archivo dump (al abrir el primer archivo dump va tardar un poco por el motivo de que se está descargando los Symbolos de la url que le hemos configurado antes)
Podemos empezar con el comando:
!analyze –v
Con este comando podemos ver todos los detalles de archivo dump.
0: kd> !analyze -v
PFN_LIST_CORRUPT (4e)
Typically caused by drivers passing bad memory descriptor lists (ie: calling
MmUnlockPages twice with the same list, etc).  If a kernel debugger is
available get the stack trace.
Arguments:
Arg1: 00000099, A PTE or PFN is corrupt
Arg2: 0004d4f9, page frame number
Arg3: 00000002, current page state
Arg4: 0004d4ee, 0

Debugging Details:
------------------
BUGCHECK_STR:  0x4E_99
CUSTOMER_CRASH_COUNT:  1
DEFAULT_BUCKET_ID:  VISTA_DRIVER_FAULT
PROCESS_NAME:  Mcshield.exe
CURRENT_IRQL:  2
LAST_CONTROL_TRANSFER:  from 82b066dc to 82af9d10
STACK_TEXT:
aadbba50 82b066dc 0000004e 00000099 0004d4f9 nt!KeBugCheckEx+0x1e
aadbba68 82ac4598 c0006000 aadbbbf0 00000000 nt!MiBadShareCount+0x24
aadbbb7c 82ad6ad4 c0005eb8 c0005f38 855da4a8 nt!MiDeletePteRun+0x66a
aadbbc84 82ad0e41 00bd0000 00c50fff 8c5ea1d1 nt!MiDeleteVirtualAddresses+0x3c1
aadbbd1c 82a6044a ffffffff 02cbf828 02cbf824 nt!NtFreeVirtualMemory+0x60b
aadbbd1c 77a664f4 ffffffff 02cbf828 02cbf824 nt!KiFastCallEntry+0x12a
WARNING: Frame IP not in any known module. Following frames may be wrong.
02cbf75c 00000000 00000000 00000000 00000000 0x77a664f4
STACK_COMMAND:  kb
FOLLOWUP_IP:
nt!MiBadShareCount+24
82b066dc cc              int     3
SYMBOL_STACK_INDEX:  1
SYMBOL_NAME:  nt!MiBadShareCount+24
FOLLOWUP_NAME:  MachineOwner
MODULE_NAME: nt
DEBUG_FLR_IMAGE_TIMESTAMP:  4c1c3fac
IMAGE_NAME:  memory_corruption
FAILURE_BUCKET_ID:  0x4E_99_nt!MiBadShareCount+24
BUCKET_ID:  0x4E_99_nt!MiBadShareCount+24
Followup: MachineOwner

Si nos fijamos en MODULE_NAME y IMAGE_NAME este es el error, que tenemos, los bloques de memoria están corruptos, pero para asegurarnos de que es la memoria física, tenemos que usar este comando:
0: kd> !memusage
Search: READ_PVOID error
InitTypeRead(nt!MmPhysicalMemoryBlock, nt!_PHYSICAL_MEMORY_DESCRIPTOR) error 1
En este caso ya está más que claro, que es lo que está fallando y para detectar cual es el modulo de memoria que nos está fallando (en el caso de que tenemos más de 1 modulo) tenemos que realizar un test de la memoria física.

Otro archivo DUMP con otro error y esta vez no por fallo fisico si no por fallo del software/drivers:

kd> !analyze -v
BAD_POOL_HEADER (19)
The pool is already corrupt at the time of the current request.
This may or may not be due to the caller.
The internal pool links must be walked to figure out a possible cause of
the problem, and then special pool applied to the suspect tags or the driver
verifier to a suspect driver.
Arguments:
Arg1: 00000020, a pool block header size is corrupt.
Arg2: edf60120, The pool entry we were looking for within the page.
Arg3: edf60188, The next pool entry.
Arg4: 0c0d0403, (reserved)
Debugging Details:
------------------
BUGCHECK_STR:  0x19_20
POOL_ADDRESS:  edf60120
CUSTOMER_CRASH_COUNT:  1
DEFAULT_BUCKET_ID:  DRIVER_FAULT_SERVER_MINIDUMP
PROCESS_NAME:  cmd.exe
CURRENT_IRQL:  0
LAST_CONTROL_TRANSFER:  from 808927bb to 80827c83
STACK_TEXT: 
b2879250 808927bb 00000019 00000020 edf60120 nt!KeBugCheckEx+0x1b
b28792b8 f7b7ac3c edf60128 00000000 f7b7c2bd nt!ExFreePoolWithTag+0x477
b2879370 f7b7ac7f a2a3e0e8 f080daf0 edd46cd8 Ntfs!NtfsAddDosOnlyName+0x1d1
b28793ac f7b904af a2a3e0e8 00000001 20811000 Ntfs!NtfsAddLink+0xac
b28795a8 f7b94a04 a2a3e0e8 a07330d0 a0733260 Ntfs!NtfsCreateNewFile+0x847
b28797cc f7b91ef8 a2a3e0e8 a07330d0 b287980c Ntfs!NtfsCommonCreate+0x1226
b28798d0 8081df85 a4b855a8 a07330d0 a533cb88 Ntfs!NtfsFsdCreate+0x17d
b28798e4 f723a458 a07330d0 a533cb88 a42e04b0 nt!IofCallDriver+0x45
b2879910 8081df85 a4358e78 a07330d0 b2879a30 fltmgr!FltpCreate+0xe4
b2879924 f7b1e203 b2879a30 a1564308 a1564364 nt!IofCallDriver+0x45
WARNING: Stack unwind information not available. Following frames may be wrong.
b2879964 f7b0117d b2879a30 a0733284 a421ec30 mfehidk+0x26203
b2879988 f7b01f2d 00000002 a0733284 a33f3c08 mfehidk+0x917d
b2879a20 f7b1d45b cccccccc a52bcc38 a3f35168 mfehidk+0x9f2d
b2879a48 8081df85 a3f35168 a07330d0 a07330d0 mfehidk+0x2545b
b2879a5c 808f904b b2879c04 a52d1bb0 00000000 nt!IofCallDriver+0x45
b2879b44 80937a20 a52d1bc8 00000000 a1d68610 nt!IopParseDevice+0xa35
b2879bc4 80933b54 00000000 b2879c04 00000042 nt!ObpLookupObjectName+0x5b0
b2879c18 808eaeff 00000000 00000000 879c8801 nt!ObOpenObjectByName+0xea
b2879c94 808ec199 0013fc14 40100080 0013fbb0 nt!IopCreateFile+0x447
b2879cf0 808eec28 0013fc14 40100080 0013fbb0 nt!IoCreateFile+0xa3
b2879d30 808897cc 0013fc14 40100080 0013fbb0 nt!NtCreateFile+0x30
b2879d30 7c82860c 0013fc14 40100080 0013fbb0 nt!KiFastCallEntry+0xfc
0013fc0c 00000000 00000000 00000000 00000000 0x7c82860c
STACK_COMMAND:  kb
FOLLOWUP_IP:
mfehidk+26203
f7b1e203 ??              ???
SYMBOL_STACK_INDEX:  a
SYMBOL_NAME:  mfehidk+26203
FOLLOWUP_NAME:  MachineOwner
MODULE_NAME: mfehidk
IMAGE_NAME:  mfehidk.sys
DEBUG_FLR_IMAGE_TIMESTAMP:  4a79a9b2
FAILURE_BUCKET_ID:  0x19_20_mfehidk+26203
BUCKET_ID:  0x19_20_mfehidk+26203
Followup: MachineOwner

En el Module_Name y en Image_Name nos muestra cual es el proceso y el driver que ha provocado el volcado y el reinicio.
0x19 Error Check: BAD_POOL_HEADER
La comprobación de errores BAD_POOL_HEADER tiene un valor de 0x00000019. Esto indica que el encabezado del bloque está dañado.
El problema es porque el pool  está dañado.
Para ver cual es la causa y poder indentificar mejor el fallo teneis que usar las opciones disponibles de !analyze que son: 
-v
Salida de info extendida por pantalla
-f
Genera información sobre la excepción. Se usa para ver un análisis de la excepción aún si el depurador no la ha detectado.
-hang
Genera información sobre el pete de la aplicación.  
-D BucketID
Sólo muestra aquéllos elementos que son relevantes al BucketID especificado. 
-show
Muestra en pantalla la información sobre el código de stop especificado. 
-c
Sigue con la depuración cuando el depurador se encuentra con un problema conocido. Si el problema no es uno conocido, el depurador permanecerá detenido.
Podemos usar -c con ciertos subparámetros, que configuran la lista de problemas conocidos y de porsí no se ejecutan, hasta que usemos !analyze -c -load al menos una vez. !analyze -c no tiene ningún efecto.
-load Archivoconocidos
Carga un archivo de problemas conocidos. Archivoconocidos específica la ruta y el nombre del archivo a cargar. Debe estar en formato xml.  Se usará en todos los análisis posteriores con el parámetro !analyze -c hasta que se descargue el archivo o se cargue otro nuevo que sustituya al cargado. 
-unload
descarga la lista de problemas conocidos.
-help
Muestra ayuda para la extensión !analyze -c en la ventana de comandos del depurador.
BugCheckCode
Específica el código de stop a mostrar.
BugParameters
Especifica hasta cuatro parámetros del código separados por espacios. Ese parámetro nos permite mayor refinamiento en la especificación de los cuatro parámetros.
Con el comando LMV M controlador-que-queremos-analizar
3: kd> lmv m mfehidk
start    end        module name
f7af8000 f7b49c40   mfehidk  T (no symbols)          
    Loaded symbol image file: mfehidk.sys
    Image path: mfehidk.sys
    Image name: mfehidk.sys
    Timestamp:        Wed Aug 05 17:48:02 2009 (4A79A9B2)
    CheckSum:         00059EED
    ImageSize:        00051C40
    Translations:     0000.04b0 0000.04e4 0409.04b0 0409.04e4

Podemos ver los detalles del controlador como la fecha/hora de cuando se ha creado este controlador por el fabricante y no es la fecha de cuando se instalo.

Saludos

0 comentarios:

Publicar un comentario