更改已在运行的程序的变量值



我认为这是不可能的,但我应该尝试一下。

我有一个程序,正在进行物理模拟并将帧记录到文件中。它记录直到未达到分解值,例如:

int counter=0; //global variable
void SomeFunction()
{
...
if(counter == 400) //written exactly by this way, i.e. 400 is not a variable, just a number
PostQuitMessage(0);
else
MakeScreenshot();
counter++;
...
}

问题是我忘了将if(counter == 400)更改为if(counter == 1000),现在程序将以 400 帧完成,尽管我需要 1000 帧。

我不能只是重新编译程序,因为计算非常繁重,而且程序已经运行了 2 天,我等不及了。

对我来说非常重要,有没有办法在程序运行期间更改if语句或确切的变量值?


唯一的希望是,据我所知,有一些程序可以像改变金钱/健康/游戏中的其他东西一样,并且用户可以按值搜索变量并更改它

目前它在大约 200-300 帧上,我几乎没有时间修复它。

您可以使用Windows函数ReadProcessMemoryWriteProcessMemory

但是您需要确定值的位置400.在正在运行的程序中查找值可以使用上述函数完成。根据常量的大小,它应该是USHORTUINT

因此,您可以使用以下步骤:

  1. 在第二个实例中查找值
  2. 隔离周围的操作码序列。
    例如,cmp xxx, 400
  3. 在正在运行的可执行文件中查找此 OpCode 序列以查找唯一位置并将关键值替换为1000

这可以称为"热补丁"。这就是简单的内存中作弊的工作方式,需要root权限。

我下载了作弊引擎,并通过其值找到了计数器变量的地址。在所有地址中,我需要的地址都显示为绿色。

我将存储在该地址的值更改为 401,现在一切正常。

最新更新