У меня есть дамп памяти (неуправляемый процесс). Как я могу извлечь (используя windbg) одну из DLL, загруженных в процесс? Я имею в виду фактическое сохранение файла dll на диск
Как я могу извлечь файл DLL из дампа памяти?
Ответы (3)
Вы можете использовать sos.dll внутри каталога Windbg.
Сначала загрузите sos.dll в windbg:
.load clr10\sos.dll
Затем используйте !sam ИЛИ !SaveAllModule для извлечения модулей в определенное место на диске:
!sam c:\notepad
Чтобы извлечь DLL без использования SOS, используйте расширение .writemem следующим образом:
узнайте начальный и конечный адреса модуля, используя
lmvm dllname
пример вывода для ieframe:start end module name
61370000 61fb8000 ieframe
вычислить длину = конец-начало:
? 61fb8000 - 61370000
вывод:Evaluate expression: 12877823 = 00c48000
затем сохраните DLL следующим образом:
.writemem C:\tmp\mydll.dll 61370000 L?00c48000
Это вряд ли даст вам точную DLL, поскольку она была загружена с диска, исправить это нетривиально.
(Частично основано на эта статья)
Да, это правда. calc.exe также извлечет информацию о многопользовательском интерфейсе и прикрепит ее к памяти, как и многие программы Windows, такие как mspaint, photoviewer и т. д.