2009-10-29 13 views

Respuesta

5

Puede usar el directorio sos.dll dentro del directorio windbg.

En primer lugar, cargar el sos.dll en windbg:

.load clr10\sos.dll 

A continuación, utilice SAM o SaveAllModule para extraer los módulos sobre la ubicación del disco específica:!!

!sam c:\notepad 
2

Para extraer un DLL sin utilizar SOS, utilice la extensión .writemem de la siguiente manera:

  1. descubra las direcciones de inicio y final del módulo usando lmvm dllname
    salida de ejemplo para IEFrame:
    start end module name
    61370000 61fb8000 ieframe

  2. calcular la longitud = fin-inicio: ? 61fb8000 - 61370000
    salida: Evaluate expression: 12877823 = 00c48000

  3. continuación, guarde el DLL como sigue:
    .writemem C:\tmp\mydll.dll 61370000 L?00c48000

Es poco probable que le proporcione la DLL exacta, ya que se cargó desde el disco, arreglar esto no es trivial.

(basado en parte en this article)

+0

Lo intenté pero no funcionó. Adjunté Windbg a Calc.exe y escribí el exe y obtuve un archivo más grande. Extraño. – Saar

+0

Supongo que eso se debe a discrepancias en la alineación: los archivos pe32 ocupan más espacio en la memoria que en el disco debido a los mayores requisitos de alineación de la memoria. Necesita reconstruir adecuadamente el ejecutable después de que se haya descargado para cumplir con estas reglas. Además, la sección de depuración no se descarta (ya que no está mapeada, supongo). Las tablas de importación también necesitan reconstrucción. – deemok

-2

Sí, es cierto. calc.exe también extraerá su información de interfaz de idioma multi usuario y lo adjuntará en la memoria, al igual que muchos programas de Windows como mspaint, photoviewer, etc.

Cuestiones relacionadas