Finding pointers using Cheat Engine
About articles in old-blogpost: These pages are old and migrated in gitbook without translation. Probably I will translate them in the future.
我们想要修改内存时,首先需要知道数据的位置——即内存地址,寻找内存地址的过程叫寻址。那么我们如何寻找内存地址呢?

我们寻址时基本会出现两种情况,分别是已知变量值或未知初始值。前者类似金钱 子弹数等直接反馈数值的数据,后者则是进度条 生命红条 法力值蓝条等不直接反馈数值的数据。
我们以CE的文本教程(CE安装目录下的Tutorial-i386.exe)为例,很明显我们想要修改的是生命值,目标是将其修改至1000,程序中我们每点击一下Hit me便会使生命值减少一点。

回到CE, 我们首先需要让CE知道我们想要修改的内存在哪个进程,聪明的小火汁可能猜到是操作系统的权限问题。确实是这个原因,当然除去权限问题外,CE不可能将所有的内存全部扫描一遍(32位的4GB内存全扫下来要好长时间,而且内存越多精度越差)。
我们选择进程点击Open。


由于生命值是整数,我们猜测其数据类型为4字节整型,即4 Bytes,我们搜索100
注:扫描浮点数类型时,注意数据类型有
float
和double
两种。我们通过内存扫描找出了43个值为100的内存地址,接下来我们点击Hit me,生命值变为93。然后我们输入数值93继续搜索,然后我们只找到了一个地址,这个即是我们想要修改的地址,我们双击将其放入列表(Cheat Table)中,然后将其改为1000。

再次点击Hit me,发现这次的数值是从1000向下减,至此修改完成。


这种情况下,我们发现我们不知道数值,但我们可以通过提供的信息获得正确的地址,首先我们选择未知的初始值。
这种操作会扫描所有内存中的值,接下来我们点击Hit me,通过回显得知数值减少了6,按照图中的方法扫描即可。
注:在没有回显的情况下,我们选择减少的数值,即Decreased value。




我们找到了7个数据,重复上述步骤。