我有一个在运行时通过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
保存到磁盘?
任何建议表示赞赏!
。NET模块未与lm一起列出,因此不在.for_each_module中
为了保存托管模块,请执行以下操作:
获取NetExt扩展名:https://github.com/rodneyviana/netext/releases
使用!wmodule命令:https://github.com/rodneyviana/netext#wmodule
!wmodule -managed -saveto c:\temp\
为了避免保存Microsoft模块(例如System.Web.dll),请改用此命令:
!wmodule -managed -noms -saveto c:\temp\