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