【问题标题】:How can I dump (in Windows) the memory space used by a DLL?如何转储(在 Windows 中)DLL 使用的内存空间?
【发布时间】:2011-03-15 01:25:51
【问题描述】:

我可以使用各种工具轻松转储进程的整个内存空间。

但是是否可以只转储某个进程加载的 DLL 使用的内存空间?我应该使用什么工具?

谢谢,

吉姆

【问题讨论】:

    标签: windows memory dll process dump


    【解决方案1】:

    您可能是指查看 DLL 中的代码分配的内存。

    我认为这是不可能的。如果 DLL 分配内存,并且 DLL 是用 C++ 编写的,并且 C/C++ Run Time 是动态链接的(即作为 DLL),那么它将使用与主应用程序相同的 C/C++ Run Time,并分配所有 DLL内存将分配在同一个堆上。

    即使 DLL 将静态链接 C/C++ 运行时,或者 DLL 是用不同的语言编写的,它也可能使用相同的默认 Windows 堆。

    如果您自己可以控制 DLL,您可以尝试为您的 DLL 实现自定义内存管理器(在 C++ 中,这意味着覆盖 new 和 delete,总共 6 个全局运算符),尝试使用不同的(即非默认)Windows 堆,然后使用低级 Windows 调试器 WinDbg 的 heapwalk 方法,但要让这一切正常工作将非常困难。或者您的 DLL 的自定义内存管理器可以使用 VirtualAlloc(或非固定,然后记录虚拟地址)在固定地址分配内存。然后就可以在正常的进程内存转储中查看这个地址空间了。

    【讨论】:

      猜你喜欢
      • 2010-12-11
      • 1970-01-01
      • 2012-02-29
      • 1970-01-01
      • 2020-11-03
      • 2018-06-15
      • 2019-07-24
      • 2016-05-31
      • 1970-01-01
      相关资源
      最近更新 更多