我正在尝试编写一个实用程序,允许我从当前在Windows中运行的进程中读取内存。我使用CreateToolhelp32Snapshot为计算机上运行的所有程序构建一个当前PID列表,并通过OpenProcess打开一个带有vm_read标志的句柄,没有任何问题。我遇到的障碍是如果给定的基址当前不可读,则Windows API的readprocessmemory函数无法读取任何内容。这就是说我可以使用什么方法来确定流程的可读部分。
我对此事的唯一想法是,我可以从(内存中的进程大小)/ 2的中间点开始迭代readprocessmemory函数并继续直到我找到允许我阅读的特定位置,但我相信这对于大型进程(o(n / 2))来说效率非常低,即使它是唯一的用户模式选项,我怎么能在内存中找到进程的总大小?
如果这个问题不适用于stackoverflow让我知道,我会关闭它,请不要向我投票我已经试图自己解决我的问题几个小时了。
答案 0 :(得分:1)
您可以为地址空间中的每个页面范围调用VirtualQueryEx
,以查明该地址是否正在使用中。如果其他进程未被暂停,则查询和读取操作之间的页面状态显然会发生变化。