You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何保存外部进程内存地址指针?避免频繁调用ReadProcessMemory

问题解答

首先明确:不同进程的虚拟地址空间是完全隔离的,你在自己程序里定义的指针(比如int* targetPtr = (int*)(0xC0EC5A0 + 0x00EC);)只在目标进程的地址空间内有效。在你的程序里,这个地址要么是非法的,要么指向你自己进程的无关内存,根本没法直接访问到目标进程的那个整数。所以直接保存跨进程的内存指针是不可能的,这是Windows为了进程安全做的核心隔离机制。

那有没有办法不用每秒反复调用ReadProcessMemory?有几个可行方案:

  • 注入DLL到目标进程:把你的代码打包成DLL,注入到目标进程的地址空间里运行。这样DLL和目标进程共享同一个地址空间,你就能直接用(int*)(0xC0EC5A0 + 0x00EC)这个指针读写内存,然后通过共享内存、管道或者Windows消息等进程间通信方式,把数据同步到你的主程序。这是最彻底的解决方法,能实现类似直接用指针的便捷性。

  • 使用内存映射文件(如果适用):如果目标进程的这块内存是从某个文件映射出来的(比如共享内存),你可以在自己的程序里调用CreateFileMapping打开同一个映射对象,再用MapViewOfFile把它映射到自己的进程空间,这样就能直接读写,不用每次调用ReadProcessMemory。但如果目标进程的内存是私有堆或栈,这个方法就用不了。

  • 优化轮询逻辑:如果上面两种方法你不想做,那只能优化ReadProcessMemory的调用频率。比如不要固定每秒调用多次,而是Hook目标进程中修改该内存的函数,当值发生变化时主动通知你的程序,避免无意义的轮询;或者根据实际需求降低轮询频率,比如值变化不频繁的话,每秒调用1-2次就够了。

另外,你的代码里用了PROCESS_ALL_ACCESS权限,其实只需要PROCESS_VM_READ就够了,权限越小越安全,也不容易因为权限不足导致OpenProcess失败。


内容的提问来源于stack exchange,提问作者IDontWantToMakeAnotherAccount

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 13:35:44