假设我有两个程序,Game.exe
和Probe.exe
两者都是我正在创作的程序(这不是我试图入侵我不拥有的可执行文件的场景)。我希望Probe
由Game
运行,并在Game
中给出某些全局变量的地址,以便Probe
可以读取和写入它们,以进行调试。
什么是从Probe
运行Game
的安全方法,并将其有效地址提供给Game
的内存,它可以读/写?如果单靠地址不可能做到这一点,那么可能是最不具侵入性的方法呢?
启动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
值传递给Probe.exe
,并让Probe.exe
在启动时继承实际的HANDLE
对象(通过CreateProcess()
与bInheritHandles=TRUE
或STARTUPINFOEX
结构 - 见Programmatically controlling which handles are inherited by new processes in Win32)。话虽这么说,一个更安全的选择是简单地将所需的变量存储在一个内存块中,Game.exe
和Probe.exe
都可以使用CreateFileMapping()
和MapViewFromFile()
共享。