Как я могу извлечь файл DLL, из памяти выводят?

Помещенный Debug.Assert() везде в код, где Вы хотите, имеют проверки работоспособности для обеспечения инвариантов. При компиляции Сборки конечных версий (т.е. никакой DEBUG постоянный компилятор), вызовы к Debug.Assert() будут удалены так, они не будут влиять на производительность.

необходимо все еще выдать исключения прежде, чем звонить Debug.Assert(). Утверждение просто удостоверяется, что все как ожидалось, в то время как Вы все еще разрабатываете.

8
задан Saar 29 October 2009 в 13:54
поделиться

3 ответа

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

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

.load clr10\sos.dll

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

!sam c:\notepad
5
ответ дан 5 December 2019 в 23:15
поделиться

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

  1. найдите начальный и конечный адреса модуля, используя пример вывода lmvm dllname
    для ieframe:
    начало конечного имени модуля
    61370000 61fb8000 ieframe

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

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

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

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

2
ответ дан 5 December 2019 в 23:15
поделиться

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

-2
ответ дан 5 December 2019 в 23:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: