如何转储(在Windows中)DLL使用的内存空间?

时间:2010-07-12 22:58:53

标签: windows memory dll process dump

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

但是有可能只转储由某个进程加载的DLL所使用的内存空间吗?我应该使用哪些工具?

谢谢,

吉姆

1 个答案:

答案 0 :(得分:0)

您可能意味着查看DLL中代码分配的内存。

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

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

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