В WinDBG / SOS.DLL: Как сохранить сразу все модули / сборки, перечисленные в! DumpDomain, на диск? - PullRequest
0 голосов
/ 28 января 2020

У меня есть приложение, которое динамически загружает кучу dlls через memorystream во время выполнения. Используя WinDBG, я вижу загруженные модули при использовании команды! DumpDomain. Использование других команд (like ! lm) не показывает / выводит список этих скрытых dlls.

Теперь я хочу сохранить эти dlls на диск с помощью команды !SaveModule [ModuleNumber from! DumpDomain list]. Это работает отлично, но дело в том, что я должен сделать это вручную для каждого модуля. Я хочу автоматизировать этот процесс и обнаружил следующий код:

!for_each_module .if ($spat ("${@#ImageName}","*.exe")) { !SaveModule ${@#Base} c:\temp\${@#ModuleName}.exe } .else { !SaveModule ${@#Base} c:\temp\${@#ModuleName}.dll }

Проблема с этим кодом состоит в том, что код на самом деле не экспортирует требуемый скрытый dlls. Я думаю, что есть что-то, что «for_each_module» не включает модули из команды! DumpDomain.


  • У кого-нибудь есть решение для этого? Или

  • Есть ли лучший способ сохранить dlls на диск?


Любой совет приветствуется!

1 Ответ

0 голосов
/ 30 января 2020
Модули

. NET не перечислены с lm, поэтому его нет в .for_each_module

Чтобы сохранить управляемые модули, сделайте следующее:

  1. Get NetExt добавочный номер: https://github.com/rodneyviana/netext/releases

  2. Используйте команду! wmodule: https://github.com/rodneyviana/netext#wmodule

!wmodule -managed -saveto c:\temp\

Чтобы не сохранять модули Microsoft (например, System.Web.dll), используйте вместо этого следующую команду:

!wmodule -managed -noms -saveto c:\temp\
...