确定打开进程的内存访问位置

时间:2018-05-05 21:59:33

标签: c++ windows winapi

我正在尝试编写一个实用程序,允许我从当前在Windows中运行的进程中读取内存。我使用CreateToolhelp32Snapshot为计算机上运行的所有程序构建一个当前PID列表,并通过OpenProcess打开一个带有vm_read标志的句柄,没有任何问题。我遇到的障碍是如果给定的基址当前不可读,则Windows API的readprocessmemory函数无法读取任何内容。这就是说我可以使用什么方法来确定流程的可读部分。

我对此事的唯一想法是,我可以从(内存中的进程大小)/ 2的中间点开始迭代readprocessmemory函数并继续直到我找到允许我阅读的特定位置,但我相信这对于大型进程(o(n / 2))来说效率非常低,即使它是唯一的用户模式选项,我怎么能在内存中找到进程的总大小?

如果这个问题不适用于stackoverflow让我知道,我会关闭它,请不要向我投票我已经试图自己解决我的问题几个小时了。

1 个答案:

答案 0 :(得分:1)

您可以为地址空间中的每个页面范围调用VirtualQueryEx,以查明该地址是否正在使用中。如果其他进程未被暂停,则查询和读取操作之间的页面状态显然会发生变化。