Можно ли экспортировать/выгрузить DLL из памяти процесса в файл?
Во-первых, я знаю
1. Возможно ли экспортировать определение dll из моего AppDomain?
2. Можно ли сохранить динамическую сборку на диск?
3. Как извлечь DLL файл из дампа памяти?
, но никто из них, похоже, не отвечает на мой вопрос.
Рассмотрим следующий сценарий: приложение С# загружает DLL из потока памяти (поэтому DLL напрямую не отображается пользователю). Есть ли инструмент, который явно позволяет выгружать или экспортировать эту конкретную DLL из памяти на диск в ее первоначальной форме?
Примечание. Мне бы хотелось, чтобы кто-то показал мне пошаговую процедуру извлечения неповрежденной DLL из дампа памяти приложения С#.
Ответы
Ответ 1
WinDbg с управляемыми расширениями отладки способен на этот трюк.
Сначала загрузите WinDbg (google microsoft debugging tools for windows
, они не являются автономной загрузкой, а частью других комплектов).
В следующей части устанавливается расширение psscor2
(от https://www.microsoft.com/en-us/download/details.aspx?id=1073) и извлеките его в папку, где находится WinDbg.
Затем запустите свою программу и присоедините к ней WinDbg (ее в меню). Введите следующие команды:
-
.load psscor2
-
!SaveAllModules c:\modules\
Найдите нужный модуль и наслаждайтесь.