Cheat Engine 指针与多级偏移

Cheat Engine 指针与多级偏移

当练习程序重启后数据地址变化,指针路径可以帮助重新定位对象。本节用可计算的示例解释基址、解引用与偏移。

指针与字段地址

指针保存一个地址。在 64 位进程中,常见指针宽度是 8 字节;32 位进程中通常是 4 字节。指针本身所在的位置、指针里保存的值和对象中某字段的位置,是三个不同概念。一个字段即使只有四字节,也可能位于由八字节指针指向的对象中。

假设练习程序的模块相对位置 Tutorial.exe+100 内保存指针值 0x2000,目标字段位于该对象偏移 0x18,那么字段地址是 0x2000+0x18=0x2018。表达式可写作 [Tutorial.exe+100]+18;方括号表示读取该地址中保存的指针。这里的地址与偏移是示意,并非实际 Tutorial 的固定位置。

添加并检查指针记录

先通过扫描找到当前练习值,确认它随目标行为改变。在地址表选择手动添加地址并勾选 Pointer,填写已验证的基址与偏移,再设置字段自身的值类型。新增的记录应解析到当前已找到的字段地址,显示的值也应和它一致。CE 版本的对话框布局可能不同,注意核对显示出来的解析过程。

多级指针需要重复“读取指针,再加偏移”的步骤,例如 [[base]+10]+18:先读取 base 指向的地址,加 0x10 后再次读取指针,最后加 0x18。请以界面实际显示的逐级地址核对偏移顺序,避免仅凭表单排列猜测哪个偏移先执行。

跨启动验证

第一次算对只证明路径在当前状态下可用。关闭并重新启动练习程序,重新连接后独立扫描目标值,再比较指针记录解析出的地址。多次启动、重新创建对象并重复此过程,能排除一些偶然有效的路径;模块更新、结构改变或对象生命周期变化仍可能使路径失效。

若某级显示问号,检查进程是否正确、模块是否加载、指针宽度是否匹配,以及中间对象是否存在。模块相对位置并不天然保证路径永久稳定,必须结合实际练习数据验证。

可以用纸笔检查每一级:先写出指针存放地址,再写出读出的指针值,最后加上该级偏移。多级情况重复这个动作。若最终地址与普通扫描结果不同,先检查哪一级开始偏离,不必立刻断定整个思路无效。每次记录读值时都注明它来自哪一次进程运行。

参考:官方指针教程、官方添加地址与偏移。