繁体   English   中英

VMMap如何知道给定的内存区域是Thread Stack,具体来说呢?

[英]How does VMMap know a given memory region is Thread Stack, specifically?

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

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

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

Mark Russinovich从不分享他的秘密,他有很多。 我想它可以从未记录的线程环境块找到,虽然我没有看到很好的候选人。 页面属性可能更好。 它使用MEM_TOP_DOWN,只有堆栈具有(检查VirtualAlloc)。 与Guard页面的组合,使StackOverflowException跳闸的那个页面将使它完全明确。 无论如何,这就是我的方式。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM