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