在WinDBG / SOS.DLL中:如何将!DumpDomain列出的所有模块/组件立即保存到磁盘?

问题描述 投票:0回答:1

我有一个在运行时通过dlls动态加载一堆memorystream的应用。使用WinDBG,当使用命令!DumpDomain时,我可以看到已加载的模块。使用其他命令(like ! lm)不会显示/列出这些隐藏的dlls

现在,我想使用dlls [DumpDomain列表中的模块编号]命令将这些!SaveModule保存到磁盘。它工作正常,但问题是我必须为每个模块手动进行操作。我想自动化此过程,发现以下代码:

!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保存到磁盘?


任何建议表示赞赏!

c# debugging windbg disassembly sos
1个回答
0
投票

。NET模块未与lm一起列出,因此不在.for_each_module中

为了保存托管模块,请执行以下操作:

  1. 获取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\
© www.soinside.com 2019 - 2024. All rights reserved.