如何从内存转储中提取DLL文件?

时间:2009-10-29 13:54:36

标签: windbg dump

我有一个内存转储(非托管进程)。 如何提取(使用windbg)加载到进程中的一个dll?我的意思是实际上将dll文件保存到磁盘

3 个答案:

答案 0 :(得分:5)

您可以在windbg目录中使用sos.dll。

首先,在windbg中加载sos.dll:

.load clr10\sos.dll

然后使用!sam OR!SaveAllModule来提取特定磁盘位置上的模块:

!sam c:\notepad

答案 1 :(得分:2)

要在不使用SOS的情况下提取DLL,请使用.writemem扩展名,如下所示:

  1. 使用lmvm dllname发现模块的起始和结束地址 ieframe的示例输出:
    start end module name
    61370000 61fb8000 ieframe

  2. 计算长度=结束开始:? 61fb8000 - 61370000
    输出:Evaluate expression: 12877823 = 00c48000

  3. 然后按如下方式保存DLL:
    .writemem C:\tmp\mydll.dll 61370000 L?00c48000

  4. 这不太可能为您提供从磁盘加载的确切DLL,修复此操作并非易事。

    (部分基于this article

答案 2 :(得分:-2)

是的,这是真的。 calc.exe还会提取其多用户语言界面信息并将其附加到内存中,mspaint,photoviewer等许多Windows程序也会如此。