用C++访问另一个程序在运行时使用的变量是否可能? 例如,我有一个程序,它总是将变量a
更改1,我想创建另一个程序并访问a
变量及其值。
是的,在另一个程序中访问变量是可能的,前提是:
通常,需要在程序之间共享的变量被放入“共享内存”,即两个或更多进程可以访问的内存区域。
共享变量需要有一个保护方案,以便只有一个进程写入变量,并且在写入变量时不读取变量。
您需要在互联网上搜索“C++windows共享内存示例”,因为这个概念很大,适合于StackOverflow答案。
编辑:堆栈变量
从技术上讲,您可以访问另一个程序堆栈上的变量,前提是该堆栈位于内存中的可寻址区域(某些处理器具有外部程序不可寻址的内部堆栈)。
问题在于时机。 许多用C++编写的程序将局部变量放在堆栈中函数或语句块的开头(如if
语句或while
循环)。 在执行离开语句块的作用域后,变量将消失。 因此,您的程序必须有很好的时间来确定变量何时在堆栈上(希望此时您的程序正在运行)。 虽然,操作系统可以将另一个程序交换到硬盘驱动器,而您的程序运行在相同的内存空间。 在这种情况下,您将无法访问其他程序的变量。
寄存器变量很少处理器有内存映射的寄存器。 大多数处理器的寄存器没有地址。 此外,您的程序可能使用相同的寄存器。 通常,操作系统会“冻结”另一个程序,将其寄存器和堆栈写入内存或硬盘驱动器中的某个区域。 然后你的程序将被加载到内存中(也就是你的程序的变量和堆栈空间将被恢复),你的程序将在它停止的地方执行。 这向您展示了其他程序中变量在时间和访问上的困难。