任何看过Mark Russovich谈论“内存管理之谜”的人都知道,vmmap工具可以向你显示与你的进程限制相关的东西(在32位窗口上2GB),其他工具似乎并不知道
我希望能够以编程方式监控我的真实总内存大小(与进程限制密切相关的大小),这样我至少可以记录当我接近进程限制时发生的事情。有没有关于vmmap如何做到这一点的公开信息?
...另外,为什么这些信息难以获得?
我所知道的事情(AFAIK)并没有完全说明你的全貌:
答案 0 :(得分:2)
我使用Dependency Walker查看Kernel32.dll
从vmmap.exe
导入了哪些Windows API函数,并找到了可能相关的以下函数:
VirtualAlloc
VirtualAllocEx
VirtualFree
VirtualProtectEx
VirtualQueryEx
看看那些,看看你是否能找到vmmap
正在做的事情。当然,动态制作的任何其他API调用(即通过LoadLibrary
)都不会出现在依赖性walker中。在处理side-bys-de加载的DLL时,它也会被打破。
答案 1 :(得分:1)
twpol/vmmap中有一个类似于VMMap的功能的开源命令行实现,它成功显示了与SysInternals VMMap所做的过程相同的所有信息。
另请参见this fork,它实现了快速堆枚举,但是我还没有亲自测试过这一点。