Как извлечь файл DLL из дампа памяти? - PullRequest
8 голосов
/ 29 октября 2009

У меня есть дамп памяти (неуправляемый процесс). Как мне извлечь (используя windbg) один из dll, загруженных в процесс? Я имею в виду на самом деле сохранение файла DLL на диске

Ответы [ 3 ]

5 голосов
/ 29 октября 2009

Вы можете использовать sos.dll внутри директории windbg.

Сначала загрузите sos.dll в windbg:

.load clr10\sos.dll

Затем используйте! Sam ИЛИ! SaveAllModule для извлечения модулей в определенном месте на диске:

!sam c:\notepad
2 голосов
/ 29 октября 2009

Чтобы извлечь DLL без использования SOS, используйте расширение .writemem следующим образом:

  1. определить начальный и конечный адреса модуля с помощью lmvm dllname
    Пример вывода для ieframe:
    start end module name
    61370000 61fb8000 ieframe

  2. рассчитать длину = конец-начало: ? 61fb8000 - 61370000
    выход: Evaluate expression: 12877823 = 00c48000

  3. затем сохраните DLL следующим образом:
    .writemem C:\tmp\mydll.dll 61370000 L?00c48000

Это вряд ли даст вам точную DLL, как она была загружена с диска, исправить это нетривиально.

(частично основано на этой статье )

0 голосов
/ 11 ноября 2009

Да, это правда. calc.exe также извлекает информацию о многопользовательском языковом интерфейсе и прикрепляет ее в памяти, как и многие другие программы Windows, такие как mspaint, photoviewer и т. д.

...