假设我有两个程序,Game.exe
和Probe.exe
这两个都是我正在编写的程序(这不是我要侵入我不拥有的可执行文件的情况)。我希望Probe
由Game
运行,并被赋予Game
中某些全局变量的地址,以便Probe
可以对其进行读写,以用于调试。
从Probe
运行Game
并将有效地址分配到Game
可以读取/写入的内存中,这是一种安全的方法?如果不可能仅通过地址来做到这一点,那么使之成为可能的最不侵入性的方法是什么?
答案 0 :(得分:4)
Game.exe
可以在启动Probe.exe
时将所需的内存地址作为命令行参数传递。
Probe.exe
可以从命令行检索那些内存地址,然后使用ReadProcessMemory()
和WriteProcessMemory()
来访问它们。为此,Probe.exe
还必须获得HANDLE
流程的Game.exe
:
Game.exe
可以将其进程ID作为命令行参数传递,然后Probe.exe
可以将该ID传递给OpenProcess()
。或
Game.exe
可以使用GetCurrentProcess()
和DuplicateHandle()
创建自己的HANDLE
的可继承副本,然后将该HANDLE
值传递给{{1} },并让Probe.exe
在启动时继承实际的Probe.exe
对象(通过CreateProcess()
和HANDLE
或STARTUPINFOEX
结构-参见{{ 3}})。话虽这么说,更安全选项是将所需变量简单地存储在bInheritHandles=TRUE
和Game.exe
都可以使用{{3}共享的内存块中}和Programmatically controlling which handles are inherited by new processes in Win32。