我有一个内存转储(非托管进程)。 如何提取(使用windbg)加载到进程中的一个dll?我的意思是实际上将dll文件保存到磁盘
答案 0 :(得分:5)
您可以在windbg目录中使用sos.dll。
首先,在windbg中加载sos.dll:
.load clr10\sos.dll
然后使用!sam OR!SaveAllModule来提取特定磁盘位置上的模块:
!sam c:\notepad
答案 1 :(得分:2)
要在不使用SOS的情况下提取DLL,请使用.writemem扩展名,如下所示:
使用lmvm dllname
发现模块的起始和结束地址
ieframe的示例输出:
start end module name
61370000 61fb8000 ieframe
计算长度=结束开始:? 61fb8000 - 61370000
输出:Evaluate expression: 12877823 = 00c48000
然后按如下方式保存DLL:
.writemem C:\tmp\mydll.dll 61370000 L?00c48000
这不太可能为您提供从磁盘加载的确切DLL,修复此操作并非易事。
(部分基于this article)
答案 2 :(得分:-2)
是的,这是真的。 calc.exe还会提取其多用户语言界面信息并将其附加到内存中,mspaint,photoviewer等许多Windows程序也会如此。