我一直在使用Mark Russinovich的VMMap为我正在分析的进程绘制虚拟内存。使用VirtualQueryEx,我可以遍历外部进程的空间,并获得关于该进程地址空间内的内存区域的信息。当然,这些区域与VMMap相匹配,但VirtualQueryEx只能告诉我内存是否已提交/保留/空闲,以及它是否是私有/共享/映像。
我找不到任何其他有文档记录的方法来查询进程虚拟内存。VMMap似乎知道一种方法来查询内存,以了解它是“私有数据”还是“线程堆栈”。VirtualQueryEx将这两个标签都标记为MEM_PRIVATE。那么VMMap是如何区分这一点的呢?
有没有其他API函数可以用来辨别这些细节?
发布于 2011-04-07 04:13:53
Mark Russinovich从不分享他的秘密,他有很多秘密。我想它可以从未记录的线程环境块中找到,尽管我没有看到很好的候选者。更好的线索可能是页面属性。它使用MEM_TOP_DOWN,只有堆栈才有(请查看VirtualAlloc)。与保护页面的组合,即触发StackOverflowException的页面将使其完全明确。不管怎样,这就是我要做的。
发布于 2017-07-12 00:48:32
我怀疑它只是去寻找所有的TEB。请记住,ProcExp有一个内核模式驱动程序来收集它的大部分数据。从EPROCESS中,ThreadListHead允许您找到所有的ETHREAD/ KTHREAD,并且KTHREAD有TEB的地址。
https://stackoverflow.com/questions/5571995
复制相似问题