首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VMMap如何知道给定的内存区域是线程堆栈?

VMMap如何知道给定的内存区域是线程堆栈?
EN

Stack Overflow用户
提问于 2011-04-07 03:36:36
回答 2查看 2.2K关注 0票数 9

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

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

有没有其他API函数可以用来辨别这些细节?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-07 04:13:53

Mark Russinovich从不分享他的秘密,他有很多秘密。我想它可以从未记录的线程环境块中找到,尽管我没有看到很好的候选者。更好的线索可能是页面属性。它使用MEM_TOP_DOWN,只有堆栈才有(请查看VirtualAlloc)。与保护页面的组合,即触发StackOverflowException的页面将使其完全明确。不管怎样,这就是我要做的。

票数 7
EN

Stack Overflow用户

发布于 2017-07-12 00:48:32

我怀疑它只是去寻找所有的TEB。请记住,ProcExp有一个内核模式驱动程序来收集它的大部分数据。从EPROCESS中,ThreadListHead允许您找到所有的ETHREAD/ KTHREAD,并且KTHREAD有TEB的地址。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5571995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档