portable descargar c++ visual-c++ windbg crash-dumps
downloadWintruderdownloaddownloadUniqstack

c++ - descargar - windbg portable



¿Cómo usar WinDbg para analizar el volcado de bloqueo para la aplicación VC++? (4)

¿Cómo uso WinDbg para analizar un archivo de volcado?


(vea las secciones "Vaciado" a continuación)

Tutoriales básicos y demostraciones del uso de WinDbg

Diferentes formas de "Comenzar" / Adjuntar WinDBG

Espacios de trabajo

Comprender cómo funcionan los espacios de trabajo ...

Cmdtree

Un "cmdtree" le permite definir un "menú" de comandos del depurador para acceder fácilmente a los comandos que se utilizan con frecuencia sin tener que recordar los nombres de los comandos terminados.

No tiene que poner todas las definiciones de comando en el mismo archivo de texto cmdtree ... puede mantenerlas separadas y cargar varias si lo desea (luego obtienen su propia ventana).

Guion de inicio

Puede usar la opción -c en la línea de comando para ejecutar automáticamente un script WinDBG cuando inicie WinDBG.

Da la oportunidad de activar el modo DML (Lenguaje de marcado del depurador), cargar extensiones particulares, establecer puntos de interrupción de excepción .NET, establecer indicadores del kernel (por ejemplo, al depurar kernel, es posible que necesites cambiar la máscara DbgPrint para ver la información de rastreo ... ed nt ! Kd_DEFAULT_Mask 0xffffffff), carga cmdtrees, etc.

Un script de ejemplo:

$$ Include a directory to search for extensions $$ (point to a source controlled or UNC common directory so that all developers get access) .extpath+"c:/svn/DevTools/WinDBG/Extensions" $$ When debugging a driver written with the Windows Driver Framework/KMDF $$ load this extension that comes from the WinDDK. !load C:/WinDDK/7600.16385.1/bin/x86/wdfkd.dll !wdftmffile C:/WinDDK/7600.16385.1/tools/tracing/i386/wdf01009.tmf $$ load some extensions .load msec.dll .load byakugan.dll .load odbgext.dll .load sosex .load psscor4 $$ Make commands that support DML (Debugger Markup Language) use it .prefer_dml 1 .dml_start $$ Show NTSTATUS codes in hex by default .enable_long_status 1 $$ Set default extension .setdll psscor4 $$ Show all loaded extensions .chain /D $$ Load some command trees .cmdtree c:/svn/DevTools/WinDBG/cmdtree/cmdtree1.txt .cmdtree c:/svn/DevTools/WinDBG/cmdtree/cmdtree2.txt $$ Show some help for the extensions !wdfkd.help !psscor4.help .help /D

Command Cheat Sheets

Extensiones

Las "extensiones" le permiten ampliar el rango de comandos / características compatibles con WinDBG.

  • BigLasagne (bldbgexts y blwdbgue)
    - resaltado de sintaxis de ensamblaje y una herramienta de mapeo de controlador)

  • Lector de números BigLib

  • Byakugan
    - detectar métodos antidebugging, visualización / emulación del montón de vista, seguimiento de búferes en la memoria

  • Call Flow Analyzer + KnExt

  • CmdHist
    - registra cada comando que ejecutó en su sesión de depuración para que pueda volver a ejecutar fácilmente

  • Core Analyzer
    - Verifica las estructuras de montón para detectar corrupción, detecta objetos compartidos por hilos, etc.

  • Extensión dom WinDBG
    - (! stlpvector,! idt,! unhex,! grep, etc.)

  • dumppe
    - vuelca el archivo PE de la memoria

  • Image Viewer Extension (Vladimir Vukićević)

  • Herramienta de depuración Intel UEFI Development Kit
    - depurar firmware UEFI

  • leaktrap
    - Rastreador de manejo GDI / USER para ayudar en la detección de fugas

  • Mona (requiere PyKD)
    - conjunto de comandos para ayudar en el análisis avanzado / encontrar exploits

  • MSEC
    - proporciona análisis automatizado de bloqueos y evaluación de riesgos de seguridad

  • narly
    - enumera información sobre módulos cargados, como si se utiliza SafeSEH, ASLR, DEP, / GS (controles de seguridad del búfer)

  • netext (Rodney Viana)
    - (! wservice - lista objetos de servicio WCF,! wconfig - muestra líneas .config,! whttp - lista HttpContexts,! wselect /! wfrom - soporta consultas tipo SQL en matrices)

  • ODbgExt
    - abrir extensiones de depurador

  • OllyMigrate
    - pasar el depurador a otro depurador sin reiniciar

  • Psscor2
    - un superconjunto de SOS para ayudar a depurar el código administrado .NET 2.0

  • Psscor4
    - un superconjunto de SOS para ayudar a depurar el código administrado .NET 4

  • PyDBGExt
    - permite el uso de scripts Python

  • PyKD
    - permite que Python se use para crear WinDBG

  • sdbgext (Nynaeve)
    - (! valloc,! vallocrwx,! heapalloc,! heapfree,! remotecall,! remotecall64,! loaddll,! unloaddll,! close,! killthread,! adjpriv,! ret)

  • SieExtPub
    -legacy extension ... ahora integrado en WinDBG en ext.dll

  • SOSEX
    - Más comandos para ayudar a depurar código NET 2.0 o 4.0 administrado

  • SPT / SDBGExt2 (Steve Niemitz)
    - (! DumpHttpContext,! DumpASPNetRequests,! DumpSqlConnectionPools,! DumpThreadPool, etc.)

  • Uniqstack
    - fuente a una extensión de depurador (necesita una cuenta en línea OSR para acceder a ella)

  • viscope
    - gráfico de cobertura de código

  • Wait Chain Traversal / wct.dll (Extensiones de depuración de Codeplex
    - mostrar cadenas de espera de subprocesos de aplicación (ayuda a encontrar deadlocks )

  • windbgshark
    - integra el analizador de protocolo Wireshark para habilitar la manipulación y el análisis del tráfico de VM

  • Extensiones de WinDBG (Sasha Goldstein)
    - Tracer, WCT, heap_stat, bkb, traverse_map, traverse_vector)

  • Punto destacado de WinDBG (ColorWindbg.dll) [Usar el Traductor de Google para traducir el enlace]
    - resaltado de sintaxis asm

Escribe tu propia extensión

Usando WinDBG para depurar código administrado

Scripting (C #, PS, Python, WinDBG)

Depuradores / Herramientas que usan la API dbgeng.dll / Herramientas WinDBG

Diferentes formas de generar archivos de volcado de choque para el análisis post-mortem

Herramientas de análisis de volcado

  • BlueScreenView : busca los archivos .dmp del minivolcado guardados por Windows después de un BSOD y extrae información sobre lo que causó el bloqueo.
  • Debug.Analyzer (puede analizar los archivos de volcado y los complementos se pueden escribir en .NET)
  • SAD - Simple After Dump (analizador post mortem)
  • Volatility : marco para analizar la "memoria" registrada en los archivos de volcado ( hoja de referencia )

Herramientas relacionadas con volcado

  • Citrix dumpcheck: comprueba la coherencia del archivo de volcado (parece que se ha abandonado el link + link )
  • dumpchk (parte de Debugging Tools) - verifica la consistencia de un archivo de volcado
  • MoonSols Windows Memory Toolkit (anteriormente windd ) - convierte varios archivos de volcado de memoria bruta en archivos dmp compatibles con WinDBG
  • vm2dmp - vm2dmp estado a memoria de Microsoft VM de VM Hyper-V
  • vmss2core : convierte el archivo de instantánea de VMWare en un archivo de volcado de núcleo ( download ), ( instructions )

Kernel Debugging Virtual Machines

  • VMKD - Extensiones KD de máquina virtual
  • VirtualKD - (soporte del depurador del kernel para SO alojado en VMWare / VirtualBox)

Videos

Blogs

Algunos blogs (mezcla de depuración de código nativo y administrado).

Artículos avanzados y recursos tutoriales

Depuradores alternativos

Otros enlaces


Aquí hay algunos pasos generales que lo pondrán en su camino:

En primer lugar, debe cambiar la configuración de su compilador para que cree archivos PDB, incluso para compilaciones de versiones. Las versiones posteriores del compilador de Visual C ++ hacen esto de forma predeterminada, pero en muchas versiones de Visual C ++ debes hacerlo tú mismo. Cree archivos de bases de datos de programas y luego mantenga un archivo de esos archivos junto con cada compilación de su aplicación. Es fundamental que cada compilación de sus aplicaciones tenga su propio conjunto de PDB. No puede simplemente reutilizar los mismos que creó con compilación 10 para examinar los volcados generados por compilación 15, por ejemplo. Durante la vida de su proyecto, terminará con una tonelada de PDB, así que prepárese para eso.

Luego, debe ser capaz de identificar la versión exacta de su aplicación que generó el archivo de volcado. Si está creando sus propias MiniDumps (llamando a MiniDumpWriteDump() por ejemplo), probablemente la forma más sencilla de hacerlo es simplemente hacer que parte del nombre de archivo de la MiniDump sea el número de versión completo de su aplicación. Tendrá que tener un esquema de numeración de versiones razonable para que esto funcione. En mi tienda, incrementamos el número de compilación en todas las ramas en una cada vez que el auto constructor crea una compilación.

Ahora que ha recibido el archivo de volcado del cliente, conoce la versión precisa de la aplicación que creó el volcado y ha encontrado los archivos PDB para esta compilación.

Ahora necesita revisar el historial del control de origen y encontrar el código fuente para esta versión exacta del software. La mejor manera de hacerlo es aplicar ''etiquetas'' a sus sucursales cada vez que realice una compilación. Establezca el valor de la etiqueta en el número de versión exacto, y se vuelve fácil de encontrar en la historia.

Ya está casi listo para iniciar WinDbg / Visual C ++:

  1. Obtenga el árbol de fuentes completo para esa versión de su aplicación. Colóquelo en un lugar separado en su disco duro, digamos c:/app_build_1.0.100 para la versión 1.0 de la aplicación build # 100.
  2. Obtenga los binarios para esa versión exacta de su aplicación y colóquelos en algún lugar de su disco duro. Puede ser más fácil simplemente instalar esa versión de su aplicación para obtener los binarios.
  3. Coloque los archivos PDB en la misma ubicación que los binarios en el paso 2.

Ahora tiene dos opciones para ver el archivo de volcado. Puedes usar Visual Studio o WinDbg. Usar Visual Studio es más fácil, pero WinDbg es mucho más poderoso. La mayoría de las veces, la funcionalidad en Visual Studio será suficiente.

Para usar Visual Studio, todo lo que tienes que hacer es abrir el archivo de volcado como si fuera un proyecto. Una vez abierto, "ejecuta" el archivo de volcado ( F5 por defecto) y si todas las rutas están configuradas correctamente, le llevará directamente al código que se colgó, le dará una pila de llamadas, etc.

Para usar WinDbg, debes pasar por un par de aros:

  1. Comience WinDbg
  2. Abra el archivo de volcado. ( Ctrl + D por defecto)
  3. Indique a WinDbg que obtenga los archivos de símbolos de MicroSoft correctos. Escriba .symfix . Esto puede tomar unos momentos, ya que sacará un montón de cosas de Internet.
  4. Indique a WinDbg dónde están los símbolos (archivos PDB). Escriba .sympath+ c:/pdblocation , sustituyendo siempre que coloque los archivos PDB por la ruta. Asegúrate de que obtienes el signo más allí sin espacio en blanco entre .sympath y el signo + contrario, te equivocarás con el paso 3.
  5. Dile a WinDbg dónde está el código fuente. Escriba .srcpath c:/app_build_1.0.100 sustituyendo la ruta donde obtuvo el código del control de origen para esta versión del software.
  6. Dile a WinDbg que analice el archivo de volcado. Tipo !analyze -v

Después de unos momentos, si todo está configurado correctamente, WinDbg lo llevará directamente a la ubicación de su bloqueo. En este punto, tiene un millón de opciones para profundizar en el espacio de memoria de su aplicación, el estado de las secciones críticas, ventanas, etc. Pero eso está más allá del alcance de esta publicación.

¡Buena suerte!


Esta es una pregunta realmente amplia.

  1. El primer paso es cargar el archivo de volcado en una instancia de WinDbg.
  2. Luego, debe asegurarse de tener una configuración de símbolos.
  3. Finalmente, puede ejecutar el comando !analyze -v para realizar un análisis básico. Necesita tener información de símbolos disponible para su código para hacer que los archivos dump valgan la pena.

El sitio web Memory Dump, Software Trace, Debugging, Malware, Victimware y Intelligence Analysis Portal ha sido muy informativo para mí. También disfruté mucho el libro, Advanced Windows Debugging, de Mario Hewardt y Daniel Pravat.