jueves, 3 de febrero de 2011

Debugging III Parte

Para estar seguros que nuestro sistema podrá guardar los archivos de volcado, podemos comprobar que la unidad del sistema (normalmente C:\Windows) dispone de suficiente espacio libre, que el disco dispone de suficiente espacio libre y que el disco no esté corrupto.
Un volcado de memoria completo supone que el espacio libre necesario debe ser al menos igual a la cantidad de memoria física presente en el equipo. Hay que comprobar que hay espacio suficiente en la unidad del sistema para el máximo tamaño de archivo de paginación para el archivo de volcado.
Para evitar fragmentación del disco al crear el archivo de volcado de memoria es interesante establecer un tamaño fijo para el archivo de volcado como para el sistema, el tamaño deseado y recomendado por microsoft es de 1,5 tamaño de la memoria fisica y así no necesitar expandirlo mientras se crea el volcado de memoria.
Se ha de comprobar que la ruta del archivo de volcado de memoria, de forma predeterminada %systemroot%\Memory.dmp, dispone de suficiente espacio libre para almacenar el volcado.
Para utilizar con destreza la herramienta Windbg requiere largo tiempo de estudio ya que es una aplicacion bastante compleja, conocer todas las funcionalidades que pueda permitir esta herramienta. Sin embargo cuanto mas conocimientos se tenga de esta herramienta, mas informacion se obtendra y menos tiempo necesario se invertira. Entre los comandos fundamentales que se deben conocer aparte de los comando que he presentado en Debugging & Optimization II Parte son los siguientes:
!VM
La salida de este comando muestra las aplicaciones que usaban la memoria virtual junto con su distribucion en el momento del volcado.
.logappend
Permitira escribir todo el contenido de la shell en un archivo log.Es muy util para exportar todo lo que sacamos en pantalla de la shell y disponer de una bitacora de todos los comandos ejecutados hasta el momento.
.logappend D:\Windbg.log (en mi caso puse esta ruta de path, pero podeis poner la ruta cual os convenga mejor)
.logclose
Este comando cierra el log para su posterior analisis
!process 0 0 
Este comando informa sobre todos los procesos que se encontraban en ejecucion en el momento de la recojida del volcado de memoria.
!process 0 7
Este comando es para obtener datos asociados a los procesos, como puedes ser los hilos de ejecucion.
.process
Establece el contexto para un proceso determinado.
lm t n
Muestra una lista de los modulos que se encontraban cargados en la memoria antes de realizar el volcado.
dt (Display Type process)
Este comando es capaz de mostrar la estructura de una variable ya sea local o global y su tipo de dato.Por ejemplo el objeto EPROCESS:
kd> dt nt!_EPROCESS
   +0x000 Pcb              : _KPROCESS
   +0x078 ProcessLock      : _EX_PUSH_LOCK
   +0x080 CreateTime       : _LARGE_INTEGER
   +0x088 ExitTime         : _LARGE_INTEGER
   +0x090 RundownProtect   : _EX_RUNDOWN_REF
   +0x094 UniqueProcessId  : Ptr32 Void
   +0x098 ActiveProcessLinks : _LIST_ENTRY
   +0x0a0 QuotaUsage       : [3] Uint4B
   +0x0ac QuotaPeak        : [3] Uint4B
   +0x0b8 CommitCharge     : Uint4B
   +0x0bc PeakVirtualSize  : Uint4B
   +0x0c0 VirtualSize      : Uint4B
   +0x0c4 SessionProcessLinks : _LIST_ENTRY
   +0x0cc DebugPort        : Ptr32 Void
   +0x0d0 ExceptionPort    : Ptr32 Void
   +0x0d4 ObjectTable      : Ptr32 _HANDLE_TABLE
   +0x0d8 Token            : _EX_FAST_REF
   +0x0dc WorkingSetPage   : Uint4B
   +0x0e0 AddressCreationLock : _KGUARDED_MUTEX
   +0x100 HyperSpaceLock   : Uint4B
   +0x104 ForkInProgress   : Ptr32 _ETHREAD
   +0x108 HardwareTrigger  : Uint4B
   +0x10c PhysicalVadRoot  : Ptr32 _MM_AVL_TABLE
   +0x110 CloneRoot        : Ptr32 Void
   +0x114 NumberOfPrivatePages : Uint4B
   +0x118 NumberOfLockedPages : Uint4B
   +0x11c Win32Process     : Ptr32 Void
   +0x120 Job              : Ptr32 _EJOB
   +0x124 SectionObject    : Ptr32 Void
   +0x128 SectionBaseAddress : Ptr32 Void
   +0x12c QuotaBlock       : Ptr32 _EPROCESS_QUOTA_BLOCK
   +0x130 WorkingSetWatch  : Ptr32 _PAGEFAULT_HISTORY
   +0x134 Win32WindowStation : Ptr32 Void

!cpuinfo
Muestra la informacion de la CPU.
!sysinfo
Permite mostrar info acerca de los objetos del sistema analizados como la BIOS, la CPU, etc.
!reg
Con este comando accedemos al registro del s.o. este mostrara las claves de registro almacenadas en la memoria en un instante concreto.

0 comentarios:

Publicar un comentario