Cheat Engine 结构分析与字段对比

Cheat Engine 结构分析与字段对比

当多个数据项属于同一个对象时,结构分析可以帮助比较它们的相对位置。本节说明如何使用已知字段推测对象布局并逐项验证。

从已知字段推测结构

先找到练习程序中两个同类对象的字段地址,例如两个对象各自的计数值。若访问指令显示字段位于某个寄存器加偏移的位置,可以据此推测对象起点:例如字段为 0x2018、指令使用 [rdx+18] 且现场 RDX 是 0x2000,那么本次对象起点候选为 0x2000。示例中的数字是演示,不是固定地址。

在 Memory View 中打开数据结构分析工具,将两个对象起点放在不同列进行对比。工具可以按偏移展示内存并尝试识别类型,但类型推断只是线索。官方 Tutorial 的示例就需要把被猜成指针的字段改为两个四字节值;实际处理应以目标的数据定义、值范围和行为为准。

比较与验证字段

让对象 A 的一个已知属性改变,观察 A 列中哪些偏移变化,再让对象 B 单独变化并比较对应偏移。如果某偏移只在对应对象改变时变化,可以作为字段候选。继续测试多个值,包括保持不变和恢复原值的情况,记录每一步观察;相邻字段也可能因为事件、刷新或缓存同时变化。

注意对象起点和字段地址的关系:如果已知字段在偏移 0x18,不能把字段地址当成结构起点再把偏移加一遍。64 位进程中的指针通常占八字节,普通整数仍可能仅占四字节。对象内还可能存在对齐填充、嵌套结构和指向其他对象的指针。

处理不一致结果

如果两个对象列没有相同的变化模式,先确认它们是否真的属于同一种结构、地址是否来自同一时刻,以及对象是否已经释放或重新分配。不要把偶然出现的相同数字认作具有相同语义。对无法解释的偏移先标为未知,在获取更多证据后再命名。

结构分析窗口展示的是当前进程内存,不是自动生成的程序源代码。记录练习程序版本、对象地址获取方式、每个字段的宽度和证据,下一次重新运行时再复核,而不是沿用旧地址。

一份有用的记录可以包含对象编号、起点、字段偏移、读取宽度、改变前后的值,以及触发变化的操作。用相同方法记录第二个对象后,再比较两者。若两列同时变动,考虑是否有共享状态或统一刷新,而不是立即假设该偏移就是对象专属字段。

参考:官方 Tutorial x64 第 9 关、官方指针和对象示例。