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

如何转储(在Windows中)DLL使用的内存空间?,windows,memory,dll,process,dump,Windows,Memory,Dll,Process,Dump,我可以使用各种工具随时转储进程的整个内存空间 但是,是否可以只转储某个进程加载的DLL使用的内存空间?我应该使用什么工具 谢谢 Jim您可能是指查看DLL中由代码分配的内存 我认为这是不可能的。如果DLL分配内存,DLL用C++编写,C/C++运行时动态链接(即DLL),那么它将以相同的C/C++运行时间作为主要应用程序,所有DLL分配的内存将被分配在同一堆上。 即使DLL将C/C++运行时静态链接,或者DLL是用不同的语言编写的,它也可能使用相同的默认Windows堆 如果您自己控制DLL,可

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

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

谢谢


Jim

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

我认为这是不可能的。如果DLL分配内存,DLL用C++编写,C/C++运行时动态链接(即DLL),那么它将以相同的C/C++运行时间作为主要应用程序,所有DLL分配的内存将被分配在同一堆上。 即使DLL将C/C++运行时静态链接,或者DLL是用不同的语言编写的,它也可能使用相同的默认Windows堆

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