
简介CE傻瓜教程是一份面向游戏修改爱好者与初学者的Cheat Engine入门文档以通关Tutorial的形式讲解如何用CE修改血量、子弹与金钱等常见游戏数值。文档共1个doc文件压缩包约3.86MB内容紧凑适合零基础读者按章学习。资源已有521人学习口碑较实用。教程覆盖基本附加进程操作、精确数值扫描、未知初始数值搜索、浮点数处理、寻找改写代码实现锁定数值以及通过指针和基址应对动态地址能够帮助读者建立从“搜数值—筛地址—找代码—用指针”的完整调修思路。文档采用截图配合步骤讲解对每个关卡的关键操作与“为什么这样做”都有说明新手按图操作即可完成前三关后续找代码与指针部分也能循序渐进地理解配合CE自带训练关卡边看边做可少走弯路快速掌握这款“最强游戏修改器”的核心技巧。1. 先把 CE 当成一个“内存探查器”而不是改数工具打开某个单机 Demo看到金币数写着 998打开 CE输入 998点首次扫描候选地址十几万条。这就是多数人第一次打开这个工具时的真实画面。CE 的思维其实很简单把所有存着 998 这个数的内存地址都视为嫌疑人然后你回游戏里让这个数字发生变化剩下的真凶自然就暴露了。记住这个逻辑后面所有“傻瓜操作”都是它的变体。CE 是一款开源的内存调试工具你可以把它理解成给进程拍 X 光片看进程里到底有哪些数据、放在哪个地址、以什么类型存放也可以改动它。它适合零基础玩家改单机游戏的数值适合业余开发者分析某个本地程序的数据结构也适合想做 MOD 的人把某个数值做成脚本化的自动控制。注意边界它只能用于你自己拥有的单机离线程序。联网游戏、他人服务器上的数据不在这篇教程的讨论范围内碰那些也不是调试而是越界。2. 第一次扫描就找到目标精确数值扫描的前后两次定位2.1 为什么一次扫描找不到都要“扫两遍”很多新人以为 CE 是“输入数字、点一下、就出地址”结果第一次点完看到十几万条候选直接懵了。这不是工具不好用而是你只做了一半。单机游戏进程里相同数值的内存地址有很多金币数也许只是其中之一。一次扫描只能告诉你“哪些地址当前存着这个值”无法告诉你“哪个地址是游戏逻辑真正在用的那个”。所以要扫两遍第一遍把全部嫌疑人列出来第二遍等游戏里的数值发生变化再做一次扫描把“值也变到新数值”的地址留下来。两次扫描之间数值变了一点点候选就缩窄到个位数甚至唯一。这个“对比两次内存快照”的思路是整个 CE 操作的地基后面所有扫描类型都是它的变体精确值比对、变化量比对、区间范围比对。实际动手时先开游戏再开 CE。附加进程设置好数值类型输入当前看到的数值点“首次扫描”然后回游戏操作让数值变化再切回 CE 输入新数值点“再次扫描”。第二次扫描结果通常就剩几条了这条经验对金币、弹药、技能点这类整型数值都适用。2.2 打开进程和设置类型四字节不是唯一答案附加进程是第一步。打开 CE点左上角的“打开进程”按钮从列表里选中运行中的游戏进程。这里有个容易踩的小坑进程选错了CE 能连上但扫描永远找不到任何结果。一般通过进程名来区分比如本地 Demo 的进程名就叫 Demo.exe别选成某个同名系统进程。附加成功后CE 底部状态栏会显示进程名和 PID一眼就能确认。然后就是数值类型。很多人只知道“四字节”但实际单机游戏里数据存放方式五花八门。给一张表你在扫描之前对照着选类型位数/精度适用场景备注Byte1 字节0~255 的小整数如背包格数超界会溢出谨慎用2 Bytes2 字节0~65535 的整数老游戏常见4 Bytes4 字节整型数值金币、经验、血量默认选项成功率最高8 Bytes8 字节大数值或高精度计数少见但遇到过Float单精度浮点血量、坐标、速度、百分比显示值可能是小数Double双精度浮点精度更高的浮点物理引擎里常见String字符串名字、对话内容、道具编码需要输入编码类型一般用 UTF-8新手最容易翻车的不是扫描操作而是类型选错金币明明是整数却选了 Float导致扫描出来候选无穷多血条小数变化却选了 4 Bytes结果无论怎么过滤都找不到。一个经验是不确定类型时默认 4 Bytes 扫一遍结果太长就切到 Float 再扫一遍两个方向同时试。提示如果值在游戏里显示 998但扫描结果一直不收敛考虑显示值和存储值不一致。很多 Demo 把 998 存成 998.0 的 Float或者存成 998 但用乘以 0.1 的系数做 UI 显示。头一次用 CE就把这个“显示值不等于内存值”当成默认规则能少走一半弯路。2.3 手把手流程把金币从 998 改成 9999用步骤来走一遍最基础的整型扫描流程。目标某个本地 RPG Demo金币显示 998改成 9999。启动本地 Demo记下金币数 998。打开 CE附加到对应进程。“数值类型”选 4 Bytes“扫描类型”选“精确数值”输入 998。点“首次扫描”等待右下角候选数量稳定。这一步会得到几万到十几万条结果正常。回游戏让金币变化。随便买个物品或者捡个钱让金币变成比如 997。切回 CE输入 997点“再次扫描”。候选数量会急剧下降。重复第 5、6 步一两次直到候选数量到了个位数。把剩下的地址用“添加地址到地址列表”按钮加入底部列表。双击列表里的数值改成 9999回游戏看金币是否变化。上面第 4 步的“首次扫描”是建立内存快照第 5、6 步的“再次扫描”是在这个快照基础上做差值过滤。两次之间游戏数值必须真实发生了改变否则结果不会缩窄。如果反复扫描候选数量一直不降先回游戏做一次明显的加减操作让数值上下浮动大一点再重新扫描。这一步不需要理解底层原理但需要一点点耐心。改完数值后如果游戏里没有生效多半是地址改错了回第 8 步确认到底保存的是不是候选列表里那一条另一个可能是数值又被游戏逻辑拉回去了这类问题放到第 5 章排查。2.4 数值“看上去是整数实际是浮点”的场景练习如果你想在动手前练习一点手感去找一个带血条的单机 Demo。血条显示成百分比比如 37%但底层存储的可能是 0.37 的 Float也可能是 37.0 的 Int甚至是一个 0~255 的 Byte。让角色受伤血条从 37% 掉到 31%你分别用 4 Bytes 和 Float 各扫一遍观察候选数量的收敛速度。这个练习值得做它让你理解“显示层”和“存储层”之间的差异。实际开发中我见过不少 Demo 把玩家血量用 Float 存UI 取整显示也见过把金币用 Double 存只为了某些计算精度。看不清存储层就永远只能靠猜。做这个练习时可以配合 CE 自带的高亮显示功能找到地址后把地址加入列表然后右键选择“查看内存区域”你能直接看到一段十六进制数据里哪些字节对应你正在改的值。看几次真实内存布局比看十遍教程都管用。这里也提醒一个很多新手会反复犯的错扫描类型里有个“快速扫描”勾选项它只在特定条件下生效不是所有版本都默认开启。新手阶段不要勾它保持默认的“精确数值”就好否则候选数量减太快容易漏掉真正目标。3. 数值在不停变用未知初始值扫描把它揪出来3.1 什么叫“未知初始值”血条、护甲值、经验条这类动态数有些数值你根本不知道当前内存里存的是什么。比如护甲值游戏界面显示一个进度条你只知道它大概在 70% 的位置但不知道具体数字是什么、也不知道它到底用整数还是浮点存。这时候没法用精确数值扫描因为输入无从谈起。CE 提供了“未知的初始值”这种扫描类型它不要求你提供数值而是通过观察数值的变化来筛选地址。原理很简单进程里可能有很多地址存着某个值你不知道这些值是多少但你知道角色掉血时“那个值得到了变化”。于是你可以在“扫描类型”里选“未知的初始值”点首次扫描把所有内存地址全部列入候选回到游戏让数值变化再回 CE 选“变动的数值”做下次扫描。反复几次候选就从千万级别降到了几十条。这里必须先理解一个概念CE 的扫描不是“找数值”而是“找行为”。你告诉它的从来不是“值等于什么”而是“值发生了什么”。精确扫描说“值变成了 997”未知初始值扫描说“值变小了”。理解这个差异后面所有扫描类型都能融会贯通。实际操作时首次扫描候选数量可能在百万级不要慌这是正常起点。注意未知初始值扫描的前两轮不要设置扫描范围上限也不要勾选任何“快速扫描”选项。范围被截断会导致真凶一开始就被排除后面做得再精细也白搭。我见过有人因为候选数量太多手动把范围缩到系统堆栈区域结果目标地址根本不在那儿整晚白干。宁可多等几秒也别一开始就自作聪明缩小范围。3.2 过滤一路向下用了“增加的数值”和“减少的数值”之后未知初始值扫描的核心动作是“回游戏操作再回来过滤”。具体流程以血条为例附加进程数值类型选 4 Bytes不确定就试 Float扫描类型选“未知的初始值”。点“首次扫描”等待候选数量稳定。此时八成候选都在百万以上。回游戏打一下怪让血条明显减少。切回 CE扫描类型选“减少的数值”点“再次扫描”。回游戏让血条恢复切回 CE扫描类型选“增加的数值”点“再次扫描”。重复第 3~5 步三四次让候选数量降到几十条。停止游戏操作点“未变动的数值”把波动地址排掉剩下就是稳定目标。双击候选地址加入列表把数值改一下回游戏验证。这一步里“扫描类型”的选法是节奏感问题。我的习惯是每两轮过滤里至少有一轮选“变动的数值”这样能把大量常驻内存的固定值排掉当候选数量降到 1 万以下时换“未变动的数值”来滤掉那些持续刷新的计时器。交替使用比一直选同一个类型收敛快得多。另一个实用的变体是“增加的数值”和“减少的数值”都带一个增量参数默认留空表示“只要有变化就收录”。如果你知道某次操作大约会增加 10%可以把增量范围设到 5%~20% 区间能更快排除无关波动。但注意增量参数设置是区间两端都要写没有把握时宁可留空也不要设太窄否则目标值变化幅度略小就被漏掉了。3.3 候选列表太长怎么收敛给筛选节奏一个“固定套路”很多人在未知初始值扫描的时候发现过滤了七八轮候选还有好几千条。原因通常是每轮操作幅度太小游戏里数值只变化了 1%内存里大量无关地址也会跟着微动。解决思路是让每次操作幅度大一点打一次狠的掉血 30% 以上吃一个大的补给回血 50% 以上。幅度越大过滤效果越明显。还有一个节奏技巧不要每轮都从“变动的数值”开始。先“变动”两轮再“未变动”一轮把那些持续抖动但不属于目标的地址清掉。如果不小心过滤过头候选数量为 0直接点“重置扫描”就能回到未知初始值状态重新开始。当候选数量降到几百条时把鼠标移到候选地址列上注意地址本身的开头字符。用户态进程的内存地址一般在 0x00500000 之后如果你看到大量 0x00000000~0x00400000 的地址这些多半是系统区或程序代码段可以手动排除。CE 左侧有“内存扫描选项”可以限制扫描区域一般保持默认“所有”就好等候选降到几百条再手工挑。提示如果候选里出现几百条相似地址且数值都相同别急着全加进地址列表。先用“找出是什么改写了这个地址”功能验证把第一条地址加入列表右键选“找出是什么改写了这个地址”这时 CE 会进入调试模式等游戏里数值变化后CE 会告诉你哪条指令在写这个地址。这一步不仅能确认目标真实性还能直接跳到更深层的逻辑。3.4 浮点模糊与“不断变化”的场景不进黑匣子也能用好黑匣子有一类数值每帧都在变比如角色的坐标、一个进度条的百分比、正在播放动画的时长。这类数据用未知初始值扫描也能定位但收敛节奏完全不同。坐标这类值几乎每帧都在动你用“变动的数值”过滤时候选数量下降极慢因为内存里大量数据都在变。这种情况下换一个思路用“未变动的数值”先滤几轮把固定数据清掉再倒过来用“变动”来筛。对坐标类目标先让角色停下来选“未变动的数值”扫一轮然后走两步选“变动的数值”扫一轮交替使用速度会快很多。原因很简单坐标在休息时的确静止但它的存储地址不会因为静止就消失而内存里有大量只读常量数据永远不会变先把这群“死数据”踢出去真正动态的目标就露出来了。扫描浮点类型时候选数量降不下去还有一个常见原因精度问题。比如坐标显示是 1234.56内存里可能是 1234.5623你用精确数值扫 1234.56 永远匹配不上。这时在扫描类型里选择“浮点数区间”或“模糊的数值”会比较实用。不同版本叫法略有差异但逻辑都一样给定一个范围而不是一个精确值。新手不需要把浮点二进制原理弄透把它当一个“黑匣子”用就行不知道精确值就选范围范围越用越窄。4. 重启游戏地址就失效从静态基址到指针的完整解法4.1 为什么上次改的地址这次不灵了用第 2 章的方法找到了地址改完数值游戏里生效了。但你把游戏关掉重启重新找到同一件物品的数值发现地址完全变了。这不是操作失误而是进程内存地址不固定。现代程序普遍使用动态内存分配每次启动程序向系统申请一块内存地址来存放某个关键数据这块地址每次都可能不同。直接保存那个地址等于保存了旧房间的门牌号新房客搬进来了门牌自然对不上。要解决这个问题得找到“为什么每次启动都能找到这个数据”的稳定入口。游戏进程加载时主程序模块比如 Demo.exe本身在内存里有一个基址它是相对稳定的真正动态的是那些分配到堆区的运行时数据。于是就有了“基址 偏移”的概念从模块基址出发经过一连串结构访问最终落到你要的那个值的存储位置。这一串关系在 CE 里就叫“指针”。指针这东西我一开始觉得有点玄学直到自己手写了一次偏移链才明白。比如某个 Demo 里角色血量存在一个全局对象里结构大概是基址读出一个指针 → 加上 0x18 偏移到属性结构 → 再加 0x0C 偏移到血量字段。只要基址不变、偏移不改任何一次启动都能用同一套路径定位到血量。CE 的指针扫描就是帮你自动做这件事你给它一个目标地址它在当前进程里找出可能的一组基址和偏移组合。4.2 找到“基址”的通用路子指针扫描的基本姿势流程不长但参数设置决定成败。先做一次常规扫描定位到目标地址确保它已加入地址列表。然后右键这个地址选“查找是什么改写了这个地址”回游戏操作让数值变化一次CE 会停住并显示一条写指令。这条指令通常长这样Demo.exe2A3F1或者带有[rbx18]之类的偏移表达式。记下模块名和偏移量这是人工找指针链的基础路径之一。如果不想手动跟链直接右键目标地址选“指针扫描”在弹出的对话框里设置参数。给你一套我已经跑过无数次的默认参数参数建议初始值说明Max level4指针链深度表示最多能隔几层偏移Total offset range最大值允许的偏移跨度保守就让它是最大值Max result pointers5000结果数量上限太多会卡死Start offset0从基础偏移开始算起设置完点“扫描指针”耐心等一段时间。注意指针扫描非常消耗 CPU原理是对目标地址做逆推猜想所有可能到达它的路径。数据量大时扫描几分钟都不稀奇是正常的不用慌。扫描完把结果列表按“偏移数少 模块名在 Demo.exe 上且偏移跨度小”排序优先挑那些偏移链短、跨度小的记录。这里有一个经验如果指针扫描结果为空不是游戏没有指针而是你把 Max level 设得太小或者目标地址在扫描时已被释放。把 Max level 提到 5~6 再扫一次。如果连续两次都是空的回到 4.2 开头先用“查找是什么改写了这个地址”拿到一条基准指令再按那条指令的偏移量做人工确认。自动和人工交叉验证比单纯依赖一种手段靠谱得多。提示指针扫描时勾选“仅使用当前启动路径”能显著加快速度但前提是扫描期间游戏不能退出。大多数单机 Demo 都可以用这个选项它会把候选结果限定在程序主模块范围内结果也更稳定。4.3 保存 CT 表把“可移植地址”变成持久资产找到稳定的指针后低效的做法是每次启动都重新扫描一遍。高效的做法是把这条指针路径保存到 CT 表文件里。操作步骤在地址列表里选中你刚验证过的地址右键选“指针设置”。在弹出的窗口中勾选“指针”手动输入你从指针扫描里找到的偏移链第一个偏移就是模块基址指向的起始偏移。点确定地址列表里这一条会显示成类似Demo.exe2A3F1180C的格式。右键这一条选择“添加到地址列表”确认数值类型还是原来的类型。点左上角的保存图标把整个地址列表导出成一个 .CT 文件。下次启动游戏后只要进程名没变直接加载 CT 文件地址列表里所有指针条目会在进程附加成功后自动重新解析到有效地址。这里有个先后顺序要讲清楚先附加进程再加载 CT 文件顺序反了CE 还没拿到模块基址解析不出有效地址。我自己在这上面栽过跟头加载完 CE 一直显示地址无效暗骂指针保存坏了其实是加载顺序反了。偏移链填写的格式CE 的指针设置里有一行“偏移”栏多个偏移用空格或逗号分隔。以Demo.exe2A3F1为起点再加- 0x18 - 0x0C这样的链路在偏移栏里写2A3F1 18 C的形式。每个版本界面措辞略有不同但核心都是“起点模块偏移 后续偏移列表”。除非你确认进程基址每次固定否则一定要把“模块基址”作为起点不要直接写绝对地址。4.4 偏移跨度大的地址不要死磕换个思路更快自动指针扫描给出的结果成千上万条其中很大一部分是“伪指针”它们当时走得通但重启后大概率失效。一眼鉴伪的方法看偏移链里的数字大小。如果某个偏移动辄几千甚至上万字节比如 0xFFF0这条链路的可靠性通常不高。真正稳定的结构访问偏移通常是 0x8、0x10、0x18 这类整齐的小数值。如果你发现目标地址位于一段特别大的偏移后面大概率你找到的不是基础对象而是某个临时数组的元素。正确做法是倒回去回到“查找是什么改写了这个地址”的指令行往上翻几条指令看看有没有更基础的结构基址。另一个常见做法是直接搜索代码里的常量地址。CE 扫描时在数据里搜索“已知的指针”输入模块名和地址也能直接定位到引用该地址的代码。这个方法适用于那些被全局变量直接引用的目标数据简单粗暴。但不要对它抱太高期望现代程序大部分数据是多层封装过的直接引用少更多要借助指针扫描的穷举。5. 避坑扫描不到、改了没用、游戏崩了的五类现场5.1 “扫描不到目标”的三个经典原因现象一精确输入了游戏里显示的数值候选数量始终在十几万条不管怎么“再次扫描”都不收敛。原因类型选错了。显示值和存储值类型不一致最常见就是整数显示配浮点存储或者反过来。解决换数值类型重扫一遍优先级分别是 4 Bytes、Float、8 Bytes、Double。另外考虑存储值被游戏内部做过缩放比如显示 998 实际存 9980这种情况输入 998 永远扫不到试着输入 9980 扫描一次。现象二未知初始值扫描候选数量掉到 0彻底扫空了。原因过滤时选了方向但目标值和预期相反。比如打了怪血量减少了却选了“增加的数值”。解决点击扫描类型下拉框换另一个方向补扫一轮。CE 的“未知初始值扫描”允许你随时切换方向不会丢历史数据大胆试反方向。现象三输入 998 首次扫完就有几万候选这时你回到游戏操作再回来“再次扫描”CE 提示“没有任何结果”。原因目标值在两次操作之间发生了非预期变化或者你选用了“快速扫描”导致结果被截断。解决重置扫描回到游戏确认数值真的变了一次确保不是看错数位然后重扫。多数情况重扫一次就正常了。5.2 “改了数值马上变回去”的真相是游戏逻辑在纠正现象你把金币从 998 改成 9999回游戏一看数字闪了一下 9999随后立刻跌回 998。原因这个数值不是单纯被动存储而是由游戏逻辑周期性重写。很多 Demo 每秒都在做一次状态同步把金币变量按内部表格重新计算一遍你的修改相当于在一个被持续复位的寄存器上写字。解决对这个地址启用“冻结”功能在地址列表该行数值那一栏勾选“冻结”CE 会每帧强制写回你设定的值。如果冻结了还是被改回去说明该数值的存储地址每次重写时换了地方比如它被放进了临时变量而非持久字段。这时要用第 4 章的思路找指针链别在临时地址上浪费时间。还有一类情况是数值存在浮点但你在地址列表里按整型显示它也在被重算按 Float 重新解析一次地址就正常了。这里也顺带讲一个排查顺序先确认你改的就是正在被读取的字段不是一份拷贝再确认没有第二个地址也存着这个值。CE 的地址列表可以同时添加多个候选地址你回游戏前先全部改一遍看看哪个真正生效。如果有两个地址都在影响同一个显示值那就是 UI 读一份、逻辑写另一份要两个都锁定才行。5.3 附加进程时游戏崩了先换附加方式现象CE 附加到某个本地进程的瞬间游戏闪退或直接报错退出。原因不同程序对调试器附加的兼容性不同CE 的默认附加方式在某些加固型或自校验的进程上会被主动拒绝表现就是崩溃。这无关任何在线服务或防御系统纯粹是程序自带的完整性检查在起作用。解决在 CE 设置里切换附加方式把默认的“Windows 调试器”改成“VEH 调试器”或“用户模式调试器”逐个试。如果 CE 打开进程列表时报错或看不到目标进程常见原因是权限不够。右键 CE 图标选择“以管理员身份运行”再重新打开进程列表。这个建议只针对本机运行的普通程序不涉及任何系统安全设置的规避。另外注意附加后不要立即进行大范围扫描先让游戏稳定跑几秒再操作有时崩溃只是附加瞬间高亮检查触发的偶发问题。5.4 指针保存了重启后还是失效怎么办现象按第 4 章流程保存了指针 CT 文件重启游戏后加载地址列表显示“???”或数值不对。原因一指针链选择的基址不是真正的模块基址而是某个动态分配的堆区对象重启后堆地址变了整条链自然断裂。原因二加载 CT 的时机太早进程附加成功但模块还没有完全初始化。排查方法把目标地址重新定位一次再手动做一次“查找是什么改写了这个地址”比较指令里的模块偏移是否和旧 CT 里一致。不一致说明旧链路的起点就不对回到指针扫描重新选链条。一致但加载失败那就是加载顺序问题先附加进程、等任务管理器里该进程 CPU 占用稳定了、再加载 CT。条数不够有代表性再加一条经验如果指针链里出现了两个不同的模块名例如 Demo.exe 指向某 DLL.dll 再偏移到目标这种跨模块链路在使用 DLL 延迟加载时会不稳定。优先选整条链路都落在主程序模块内的结果而不是一层跨一个模块。5.5 改了数值导致存档损坏或闪退的后悔药现象修改过后游戏存档无法读取或者每次进入特定场景就崩溃。原因改的值超出了一个合法范围比如把金币改到 2.1 亿超过了该字段实际使用的数据范围上限或者修改到了数组长度、对象指针一类字段破坏了数据结构的完整性。解决办法有两个方向。一是保留恢复点动手之前先把游戏存档目录复制一份到别处这是我最推荐的后悔药。改之前复制存档改崩了直接还原避免白打几小时进度。二是修改前先确认目标字段的性质数值类字段金币、经验可以在合理区间内任改但地址列表里若看到某个值紧挨着一堆看似随机的大数多半是数组长度或指针字段别动它。如果把地址改崩了CE 地址列表里把它删除就好不会影响进程自身状态。真正危险的是直接通过内存编辑面板修改了一大段字节。如果你在“查看内存”里改过数据建议每改一个字节都拍照记录出了差错还能逐字节还原。纯粹改数值字段的情况下这些场景基本不会遇到但知道这条兜底经验进了深层调试才不会心里没底。6. 把重复操作做成半自动CE Lua 脚本与热键做到这一步你已经能从“扫描到地址”跨到“保存指针、加载恢复”了。剩下一个高频需求是每次启动游戏都要重复锁定好几个地址用 CE 自带的 Lua 脚本一次性搞定。CE 内置 Lua 引擎地址列表里也能直接调用脚本函数这里给一个最简单的自动锁定示例-- 附加到本地 Demo 进程用进程名匹配 local proc openProcess(Demo.exe) if proc false then error(目标进程未找到请先启动本地 Demo) end -- 通过描述名找到地址列表里的记录Gem 是金币的条目名 local list getAddressList() local gemEntry list.getMemoryRecordByDescription(Gem) -- 启用冻结并设置显示值CE 会不停把该地址写回这个数 if gemEntry ~ nil then gemEntry.Active true gemEntry.Value 9999 print(Gem 已锁定为 9999) else print(没找到名为 Gem 的记录请检查条目名) end这段脚本的逻辑分三段第一段 openProcess 按进程名附加避免手动点附加第二段用 getMemoryRecordByDescription 在地址列表里精确查找条目CE 里每一条地址记录都有描述名第三段把 Active 设为 true 表示启用冻结Value 字段写入字符串形式的数字。print 的输出会出现在 CE 底部日志面板用来确认脚本执行到了哪一步。参数说明进程名 Demo.exe 必须和任务管理器里看到的一致大小写敏感描述名 Gem 对应你在地址列表里右键修改的那一列名称不是注释是精确匹配。如果想锁定多个条目用同样的方式写多个 getMemoryRecordByDescription 即可。这个脚本可以保存为 .lua 文件每次启动游戏后直接在 CE 的 Lua 控制台执行。配合热键更顺手在 CE 设置里给“启用/停用冻结”绑定一个快捷键选中地址列表里某条记录后按一下就能在当前值和你设定的锁定值之间快速切换。这个功能对调试极有价值不想锁定的时候放开让游戏逻辑运行想验证时按下立即冻结到特定值不用往返改窗口。最后聊一个使用习惯。我第一次拿 CE 对着某个本地 Demo 练手时直接修改了存档里保存的伤害值字段结果字段被游戏逻辑重新计算回原值连崩两次。之后学乖了改任何地址前先复制一份存档目录地址列表里每条记录都写清楚描述和改前的原值全部验证通过后再保存 CT 文件。这些习惯帮我省下了无数重复扫描的时间。这个方向本身不是玄学它只是把“内存中谁在写谁、谁在存谁”这件事变得可见。希望帮到你。本文还有配套的精品资源点击获取