c# - 在 WinDBG/SOS.DLL 中:如何一次将 !DumpDomain 列出的所有模块/程序集保存到磁盘?
问题描述
我有一个应用程序在运行时dlls
通过 a 动态加载一堆。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 }
这段代码的问题是代码实际上并没有导出所需的 hidden 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\
推荐阅读
- sql - Postgresql:按组中的lastet排序,不考虑组中的其他值并且没有实际的“分组依据”
- leaflet - 使用 geoJSON 数据的传单不透明度
- php - 将 Laravel Blade 模板与 Vue JS 和事件监听器一起使用
- excel - 如何使用 Excel VBA 为每个项目的不同范围创建 For 循环?
- java - 如何使用 Java 将我们的 CSV 文件索引到 Elastic Search 中?
- mysql - 如何为表中的两列返回相同的值
- radio - 2FSK 使用 Yardstick One 嗅探 RFCat
- selenium - @BeforeClass 注解不在子类上运行
- python - 如何创建新的 pandas 列,其中列表值 ==df 索引但列表的长度与原始数据帧的长度不同
- c# - 如何在 .net 中使用 ODBCConnection 进行多行插入?