我认为这是不可能的,但我应该尝试一下。
我有一个程序,正在进行物理模拟并将帧记录到文件中。它记录直到未达到分解值,例如:
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函数ReadProcessMemory
和WriteProcessMemory
。
但是您需要确定值的位置400
.在正在运行的程序中查找值可以使用上述函数完成。根据常量的大小,它应该是USHORT
或UINT
。
因此,您可以使用以下步骤:
- 在第二个实例中查找值
- 隔离周围的操作码序列。
例如,cmp xxx, 400
- 在正在运行的可执行文件中查找此 OpCode 序列以查找唯一位置并将关键值替换为
1000
。
这可以称为"热补丁"。这就是简单的内存中作弊的工作方式,需要root权限。
我下载了作弊引擎,并通过其值找到了计数器变量的地址。在所有地址中,我需要的地址都显示为绿色。
我将存储在该地址的值更改为 401,现在一切正常。