我一直在寻找用于查看或转储内存的Windows功能,或者寻找手动执行此操作的过程。我无法在任何在线位置找到有关此内容的信息。 />
我希望能够检索地址的基页地址。内存映射是我与此最好的关系,因为它提供了页面信息,例如大小,起始地址,权限等。VirtualQueryEx()解决了该问题。

我最终遍历页面直到我找到了我的目标地址落在其中的地址。

谢谢大家的帮助。

// Iterate through pages
for(base = NULL; 
    WINDOWS::VirtualQuery(base, info, sizeof(*info)) == sizeof(*info); 
    base += info->RegionSize) {

    if(p > base && p < base + info->RegionSize) {
        found = true;
        break;
    }
}


评论

“我倾向于要求我认为将是解决方案,而不是提出问题并提出建议”。 XY问题

#1 楼

VirtualQueryEx()可用于扫描进程的用户模式地址空间以枚举每个内存分配,并且可解析内存中图像的PE头以确定哪些内存块与哪个PE部分相关联。 DLL的PE标头也包含DLL的名称。

#2 楼

要将内存转储到文件中,请参见DbgHelp MiniDumpWriteDump函数。您将以转储文件(.DMP)的形式获取内存的快照,然后可以使用各种工具或使用DbgEng调试引擎自行进行分析。

评论


如果下降投票者可以解释他的投票,我将学会以后不再发布错误的答案。谢谢。

–托马斯·韦勒(Thomas Weller)
2014年3月19日在22:24

(不是我)OP的问题有点不清楚;他的头衔专门询问了内存映射,但随后他继续问有关如何“查看或转储内存”的通用问题。我想说您的答案是针对后一部分的,但真正的问题是关于内存映射的,Jason的答案将解决该问题。 +1用于提供另一种方法。

–乔纳森·莱因哈特(Jonathon Reinhart)
2014年3月26日下午6:06