análisis de volcado de windbg

- Preparaciones -

Windbg es una muy poderosa herramienta de depuración diseñado una gran cantidad de características para soportar una variedad de tareas, incluyendo la depuración de depuración en modo de usuario, de modo de núcleo de depuración, los archivos de volcado de depuración, la depuración remota, y así sucesivamente.
 ● Paso 1: Abra WinDbg, seleccione Abrir Volcado de volcado de bloqueo para abrir el archivo en las necesidades de archivo para ser depurado.

 ● PASO 2: ruta del archivo de símbolos se establecen y la ruta del archivo de origen en el menú archivo.

ruta del archivo de símbolo que se genera cuando se compila el programa de archivos PDB puede ser generado por el compilador opción de registrarse cuando VS compilado, métodos generados aún no han encontrado el tiempo para compilar bajo Delphi, si usted tiene que saber los lectores, por favor informe; Fuente la ruta del archivo es el código correspondiente ruta.

 ● Paso 3: Después de la finalización de estos ajustes, se puede utilizar el comando WinDbg en la ventana de línea de comandos para realizar diversas depuración analizó.

 * Debe tenerse en cuenta que:
① Si hay archivo PDB, para asegurar tanto como sea posible archivo PDB y generar la versión del archivo de volcado del programa es para que coincida.
② medida de lo posible para asegurarse de que la versión del código fuente del programa y el análisis del partido.
Si lo anterior existe un desajuste, el resultado es probable que conduzca al análisis de la obtenida desalineación no es correcta, o causa anormal cuando el número de líneas de código por el desplazamiento de direcciones de posicionamiento.
Si el archivo de volcado es de 64 bits, en el análisis, el número de bits requeridos para determinar si un archivo se descarga en el comando de conversión de 32 bits es la siguiente:

wow64exts .load
! sw
estos dos comandos pueden ser de 64 bits de volcado en 32 bits
de entrada de nuevo! sw puede convertirse en 32-bit de nuevo en el Dump 64

 

 

- los comandos más utilizados -

La versión actual de WinDbg proporcionó un total de más de 20 comandos estándar, y más de 140 metacommands innumerables grandes comandos extendidos.

Aquí sólo se introduzca más comúnmente utilizados comandos pueden referirse a otros "WinDbg uso detallado" o buscar en línea 

◤ Analyse -v automáticamente analizar kv ver la pila
   ! Pantalla del fugitivo consume todos los hilos de la CPU
   ! Manija e00 f mangos se muestran en detalle en detalle
   ! Cs 00bcd034 objetos críticos
   ! Vistazo Teb en la estructura del TEB
   punto de ruptura BP, así como los puntos de interrupción condicionales
  ! Pantalla Dirección y toda la información de resumen de uso de espacio de direcciones
  dd bytes Ver

  mirada dt en la estructura ◢

 

- Análisis de ejemplos -

Hay análisis de archivo de AP: Como el método temporal compilador de Delphi para generar el archivo PDB no se encuentra, aquí en el programa MFC en VS como un ejemplo para el análisis.
Después, como se muestra, el programa de ejemplo MFCApplication1.exe clic en el botón "parece que no responde", introduzca responde:

Esta vez con nuestra herramienta de generación de volcado para generar un volcado de archivos de volcado de ellos se pueden llamar desde la línea de comandos, de la siguiente manera:

Los parámetros de entrada son: títulos nombre del programa, PID, ventanas, etc., donde el PID utilizando los valores por defecto.

Después de generar el archivo de volcado, el archivo de mapa y los archivos PDB copiados en el mismo archivo de directorio de volcado (también puede ser colocado en otros caminos, de demostración aquí sólo por conveniencia):


Si tiene VS en un ordenador, a continuación, puede hacer doble clic en el archivo para abrir el volcado, desarrollado bajo VS hacer antes de tiempo, así que básicamente volcado de depuración de depuración. La figura siguiente:

Por depuración local, puede causar fácilmente el programa para localizar líneas que no responden -mientras bucle, pueden ser cargados en el contexto del análisis de programa en la lista de la pila.


Por supuesto, lo más importante es cómo utilizar WinDbg para analizar el volcado, el siguiente análisis demostrará la WinDbg:
archivo de volcado Uso WinDbg Abrir y establecer la ruta de archivo de símbolos (ruta sysmbol) y la ruta de código (ruta de origen), la interfaz es la siguiente espectáculos:

En la ventana de línea de comandos, introduzca el comando:

Analyse -v (comando automático de análisis) ↓↓

 Se puede ver por este comando puede analizar automáticamente los segmentos de código de error, obviamente, es que el bucle infinito hace que el programa no ha habido respuesta.

 

- No hay archivo PDB cómo hacerlo? -

Puede ser visto de lo anterior dos ejemplos, cuando hay archivo pdb, o si desea utilizar la WinDbg VS, relativamente Dump análisis es relativamente simple, se puede ver visualmente el segmento de código correspondiente, y después se analizaron.

La siguiente presentación se verá en el análisis de El Escorial en ausencia de archivos PDB. Aquí utilizar Delphi para compilar un programa, también se creó un bucle infinito hace que el programa parece que no responde.

El mismo procedimiento que omite aquí, en la misma ventana de entrada de comandos :! Analizar -v


En el análisis automático de los resultados, podemos ver algo de información básica sobre la pila y el contexto de las llamadas entre sí. Pero podemos ver desde aquí, el programa se ha quedado atascado en nuestro código escrito, en stocktrade! DoIpoVoteTrade + 0x28f4 fuera de la cuestión aquí.

Debido a que es en el marco mecanismo de cliente existente, puede ser más o menos juzgado en el módulo de código stocktrade un problema. función DoIpoVoteTrade de este módulo se deriva, y luego con una dirección de tamaño 0x28f4 desplazamiento sobre la base de esta función.

El desplazamiento a esta dirección, la dirección puede ser calculada problema de código dinámico, como se muestra a continuación:

 

Uso? Stocktrade! DoIpoVoteTrade + 0x28f4 puede conseguir dinámica de direcciones de desplazamiento 205cea24, esta dirección es un volcado de generación dinámica de direcciones, cuando de nuevo de depuración, y su dirección dinámica va a cambiar.

Así que aquí queremos llegar a la desviación entre el desplazamiento entre el stocktrade y DoIpoVoteTrade, DoIpoVoteTrade y códigos de error.

Se puede calcular por el desplazamiento entre stocktrade 14.png y DoIpoVoteTrade como: 0006c130

DoIpoVoteTrade desplazamiento entre el código y el error: 0x28f4

Después de obtener los dos compensado por: la dirección base del módulo de tiempo stocktrade + + 0006c130 0x28f4 de depuración se puede calcular la dirección de desplazamiento.

Lo mismo puede ser stocktrade! DoIpoVoteTrade + 0x28f4 ventana de entrada al ensamblador observó la información de compilación esa dirección de memoria, comparar e información de compilación de depuración continuación vemos cuando la interfaz de la CPU, compruebe la desviación calculada dirección es precisa. Como se muestra a continuación:

Después de la adquisición para compensar el desfase dinámico, entonces tenemos que abrir el código de error de este módulo, entonces la depuración.
módulos Stocktrade se pueden encontrar por la dirección de base de la interfaz Módulos: 1EAB0000, más el desplazamiento y obtuvieron antes 0006c130 0x28f4, la dirección de desplazamiento se puede obtener: 1EB1EA24.


Después de establecer un punto de interrupción, la interfaz de CPU abierto depurar (ctrl + alt + c), como se muestra a continuación:

A continuación, seleccione Pasar de direcciones en el menú contextual:

Saltar a WinDbg Hemos analizado la dirección de desplazamiento. Pero mi ordenador personal no sé cómo es, no siempre es el momento adecuado para saltar a salto en el pasado, todavía se está investigando. Tras el salto, se puede ver la siguiente interfaz:

unión que vemos en la presente información ventana de la interfaz de montaje y la comparación WinDbg, determina si la dirección calculada es correcta. Al mostrar la información del código puede determinar que hay un ciclo muertos. Al mismo tiempo, donde se puede hacer una pausa, y luego F8 depuración:

El programa puede ser visto también en el ciclo ha sido, por lo que la combinación del código, el programa se puede juzgar que se ha producido la anomalía para causar una no responde en la fila 715 de uFrmIpoTrade.

Por supuesto, estos son ejemplos muy simples descritos anteriormente pueden ser fácilmente combinado con el análisis del código donde se encuentra el problema. Pero el trabajo real, los problemas encontrados anormales, la posible causa es más complejo, que incluye multi-threading y más módulos y así sucesivamente.

La necesidad de adquirir experiencia poco a poco, paso a paso para analizar, pero los pasos básicos debe ser demostrada en el ejemplo anterior es aproximadamente la misma, espero que esto le puede ayudar.

Publicó un artículo original · ganado elogios 0 · Vistas 2710

Supongo que te gusta

Origin blog.csdn.net/yjj350418592/article/details/105331991
Recomendado
Clasificación