Skip to content

Instantly share code, notes, and snippets.

@AxDSan
Last active March 19, 2023 00:21
Show Gist options
  • Save AxDSan/cf4201133c24954ba8323f44d0c0aef9 to your computer and use it in GitHub Desktop.
Save AxDSan/cf4201133c24954ba8323f44d0c0aef9 to your computer and use it in GitHub Desktop.
Este documento es una guía de comandos útiles para depurar y analizar aplicaciones .NET utilizando WinDbg y otras herramientas de depuración. Los comandos se dividen en categorías según su función, como comandos de heap y memoria, comandos de depuración y comandos de desensamblaje. También incluye una sección sobre la importancia de conocer tant…

Aquí hay algunos comandos CLR útiles para analizar y depurar aplicaciones .NET. Se pueden usar en varias herramientas de depuración como WinDbg, SOS Debugging Extension y otros.

"Conócete a ti mismo, conoce a tu enemigo. Mil batallas, mil victorias". - Sun Tzu, El Arte de la Guerra

En el contexto de la ingeniería inversa, es importante tener un profundo conocimiento tanto del software que se está analizando como de las técnicas que se utilizan para analizarlo. Solo conociendo ambos se puede esperar superar con éxito los desafíos presentados por la ingeniería inversa.

Comandos de Heap y Memoria

Estos comandos se pueden utilizar para analizar el heap y la memoria del proceso administrado.

  • !dumpheap : Muestra información sobre los objetos en el heap administrado.
    • Uso: !dumpheap [-stat] [-type <typename>]
    • Ejemplo: !dumpheap -stat para mostrar estadísticas sobre todos los objetos en el heap.
    • Ejemplo: !dumpheap -type System.String para mostrar información solo para objetos cuyo nombre de tipo coincide con "System.String".
  • !eeheap : Muestra información sobre el heap administrado.
    • Uso: !eeheap [-gc] [-gcHandle] [-loader] [-class] [-stat]
    • Ejemplo: !eeheap -gc para mostrar información sobre el heap del recolector de basura.
    • Ejemplo: !eeheap -class para mostrar información sobre las clases cargadas en el proceso.
  • !dumpobj : Muestra información sobre un objeto específico.
    • Uso: !dumpobj <object>
    • Ejemplo: !dumpobj 0x12345678 para mostrar información sobre el objeto en la dirección de memoria 0x12345678.
  • !gcroot : Muestra información sobre las raíces de un objeto.
    • Uso: !gcroot <object>
    • Ejemplo: !gcroot 0x12345678 para mostrar información sobre las raíces del objeto en la dirección de memoria 0x12345678.
  • !do : Muestra información sobre un objeto específico.
    • Uso: !do <object>
    • Ejemplo: !do 0x12345678 para mostrar información sobre el objeto en la dirección de memoria 0x12345678.
  • !dumpstack : Muestra la traza de la pila para el subproceso actual.
    • Uso: !dumpstack
    • Ejemplo: !dumpstack para mostrar la traza de la pila para el subproceso actual.

Comandos de Depuración

Estos comandos se pueden utilizar para establecer puntos de interrupción y ver información de depuración.

  • .loadby sos clr : Para analizar CLR, use este comando en WinDbg.
    • Uso: .loadby sos clr
  • bp : Establece un punto de interrupción en un método.
    • Uso: bp <module>!<method>
    • Ejemplo: bp MyAssembly!MyClass.MyMethod para establecer un punto de interrupción en el método MyMethod en la clase MyClass en el módulo MyAssembly.
  • !bpmd : Establece un punto de interrupción en un método.
    • Uso: !bpmd <module> <method> [ilOffset]
    • Ejemplo: !bpmd MyAssembly MyNamespace.MyClass.MyMethod para establecer un punto de interrupción en el método MyMethod en la clase MyClass en el módulo MyAssembly.
  • !clrstack : Muestra la traza de la pila para el subproceso actual.
    • Uso: !clrstack [-a] [-p] [-l]
    • Ejemplo: !clrstack para mostrar la traza de la pila para el subproceso actual.
  • !dumpil : Muestra el código IL para un método.
    • Uso: !dumpil <method>
    • Ejemplo: !dumpil MyAssembly!MyClass.MyMethod para mostrar el código IL para el método MyMethod en la clase MyClass en el módulo MyAssembly.
  • !dumpbin: Muestra el código binario para un método. La salida incluye el código binario e instrucciones de ensamblado para el método especificado.
    • Uso: !dumpbin -raw <MethodTable>
    • Ejemplo: !dumpbin -raw 00007ffd5b5b5d5c
  • !name2ee: Muestra la tabla de métodos para un método. Este comando toma como argumentos un nombre de módulo y un nombre de método y devuelve el puntero MethodTable para el método especificado.
    • Uso: !name2ee <module> <method>
    • Ejemplo: !name2ee mscorlib.dll System.String.ToCharArray
  • !ip2md: Muestra el descriptor de métodos para un método. Este comando toma como argumento un puntero de método y devuelve el puntero MethodDesc para el método especificado.
    • Uso: !ip2md <method pointer>
    • Ejemplo: !ip2md 00007ffd5b5b5d5c
  • !dumpmodule: Muestra información sobre un módulo. Este comando toma como argumento un nombre o dirección de módulo y devuelve información sobre el módulo especificado.
    • Uso: !dumpmodule <module>
    • Ejemplo: !dumpmodule System.Windows.Forms
  • !dumpassembly: Muestra información sobre un ensamblado. Este comando toma como argumento un nombre o dirección de ensamblado y devuelve información sobre el ensamblado especificado.
    • Uso: !dumpassembly <assembly>
    • Ejemplo: !dumpassembly System.Windows.Forms
  • !dumpclass: Muestra información sobre una clase. Este comando toma como argumento un nombre de clase o un puntero MethodTable y devuelve información sobre la clase especificada.
    • Uso: !dumpclass <class>
    • Ejemplo: !dumpclass System.Object
  • !dumpinterface: Muestra información sobre una interfaz. Este comando toma como argumento un nombre de interfaz o un puntero MethodTable y devuelve información sobre la interfaz especificada.
    • Uso: !dumpinterface <interface>
    • Ejemplo: !dumpinterface System.IDisposable
  • !dumpvc: Muestra información sobre una clase de valor. Este comando toma como argumento un nombre de clase de valor o un puntero MethodTable y devuelve información sobre la clase de valor especificada.
    • Uso: !dumpvc <value class>
    • Ejemplo: !dumpvc System.Decimal
  • !dumparray: Muestra información sobre un arreglo. Este comando toma como argumento una dirección de arreglo y devuelve información sobre el arreglo especificado.
    • Uso: !dumparray <array>
    • Ejemplo: !dumparray 000001e99f7855c0
  • !dumpstack: Muestra la traza de la pila para el subproceso actual.
    • Uso: !dumpstack
    • Ejemplo: !dumpstack
  • !dso: Muestra los objetos administrados en la pila.
    • Uso: !dso
    • Ejemplo: !dso
  • !clrprof: Muestra información de perfilado.
    • Uso: !clrprof
    • Ejemplo: !clrprof
  • !dumpmd: Muestra metadatos para un método. Este comando toma como argumento un puntero MethodDesc y devuelve información de metadatos para el método especificado.
    • Uso: !dumpmd <MethodDesc>
    • Ejemplo: !dumpmd 00007ffd5b5b5d5c
  • !dumpmt: Muestra la tabla de métodos para una clase. Este comando toma como argumento un nombre de clase o un puntero MethodTable y devuelve el puntero MethodTable para la clase especificada.
    • Uso: !dumpmt <class>
    • Ejemplo: !dumpmt System.Object
  • !U : Muestra el desensamblado de un método ensamblado en sintaxis Intel.
    • Uso: !U <method>
    • Ejemplo: !U MyAssembly!MyClass.MyMethod para mostrar el desensamblado del método MyMethod en la clase MyClass en el módulo MyAssembly.
@AxDSan
Copy link
Author

AxDSan commented Mar 18, 2023

Creado y Elaborado por AxDSan si te gusto el contenido puedes seguir mi GitHub!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment