windows - VMMap 如何知道给定的内存区域是线程堆栈,具体来说?

标签 windows winapi memory kernel vmmap

我一直在使用 Mark Russinovich 的 VMMap 来绘制我正在分析的进程的虚拟内存。使用 VirtualQueryEx,我可以遍历外部进程的空间并获取有关进程地址空间内的内存区域的信息。当然,这些区域与 VMMap 匹配,但 VirtualQueryEx 只告诉我内存是否已提交/保留/免费以及它是否是私有(private)/共享/镜像。

我找不到任何其他记录在案的方法来查询进程虚拟内存。 VMMap 似乎知道一种查询内存的方法,以了解它是“私有(private)数据”还是“线程堆栈”。 VirtualQueryEx 将这两个标签都标记为 MEM_PRIVATE。那么 VMMap 是如何做出这种区分的呢?

我可以使用其他 API 函数来识别这些细节吗?

最佳答案

Mark Russinovich 从不​​分享他的 secret ,他有很多。我想它可以从未记录的线程环境 block 中找到,尽管我没有看到很好的候选人。更好的线索可能是页面属性。它使用 MEM_TOP_DOWN,只有堆栈有(检查 VirtualAlloc)。与保护页面的组合,即触发 StackOverflowException 的页面将使其完全明确。无论如何我都会这样做。

关于windows - VMMap 如何知道给定的内存区域是线程堆栈,具体来说?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5571995/

相关文章:

c# - 如何将文本文件的行添加到列表框上的各个项目中 (C#)

winapi - ntdll.dll 内部 ZwCreateUserProcess 的远跳转

node.js - 我应该如何在 node.js 中保留用于 socket.io 交互的临时数据?

c++ - 内存不足的概念

在带有 VS2012/w Update 3 的 Windows 7 上构建的 C++ 程序无法在 WinXP SP3 上运行

windows - 用于检查电池状态变量并在 if 语句中使用它的脚本,是否有任何脚本可以使 .bat 文件每分钟作为隐藏进程运行

windows - Extended-Length Paths 使用安全吗?

.net - 循环引用导致内存泄漏?

带有引用计数器的 C++ 结构导致内存泄漏

c++ - 如何在 WritePrivateProfileString() 中使用当前驱动器名称