【发布时间】:2017-10-30 06:10:45
【问题描述】:
如果我在我的进程中使用GetProcessHeaps API enumerate heaps,有没有办法知道这些堆是由哪些模块创建的?
这就是我需要这个的原因:对于purpose of my security application,我需要我的进程使用的lock virtual memory(即Windows 公共控件使用的内存,通过new operator、COM 等分配的任何内容)
我需要知道哪个模块创建了堆的原因是为了消除任何可以加载到我的进程中但与它无关的 DLL。例如,TeamViewer 加载到正在运行的进程中以添加任何他们需要的内容,所以我不想锁定它的私有堆,如果它有一个,等等。
【问题讨论】:
-
进程堆内部结构 (_HEAP) 没有关于谁(调用者的返回地址?)创建此堆的任何信息。系统不关心这个。所以你不能得到不存在的信息。在这里你可以做的最大的事情——钩住
HeapCreate和RtlCreateHeap看看谁打电话给这个。但是说 msvcrt 也为客户端创建私有堆......你会做堆栈遍历吗?认为任务没有任何可接受的解决方案 -
挂钩堆创建函数并遍历调用堆栈。但我怀疑这会非常强大。
-
好的。谢谢你们俩。我就是这么想的。
-
那些使用 VirtualAlloc 或 NUMA 分配函数实现自己的堆的模块呢?
-
@DavidHeffernan:他们不会被这个方法覆盖。
标签: c++ windows winapi heap-memory virtual-memory