CE Lua 地址表、MemoryRecord 与符号
地址表中的每条记录都可通过 CE Lua 的 MemoryRecord 对象访问。本文说明如何查找记录、读取属性和避免把失效地址当作有效值。
查找已有记录
先在地址表中手动创建一条描述为 PracticeValue 的记录,并确认它指向官方练习目标的正确值。然后运行:
local list = getAddressList()
local record = list.getMemoryRecordByDescription("PracticeValue")
if record == nil then
print("没有找到记录")
return
end
print(record.Description, record.Address, record.Value)
名称可能重复;若表中有多个相同描述,先消除歧义,必要时使用记录 ID。
地址与值
Address 是可解释的地址表达式,CurrentAddress 是当前解析结果;指针记录还由 OffsetCount 与偏移数组决定。Value 是字符串,NumericalValue 不能解析为数值时为 nil。地址解析成功不等于读到了预期对象,必须与界面和目标程序变化一起验证。
激活与生命周期
Active 对普通记录可能表示冻结,对脚本记录则触发相应启用或停用逻辑。不要对不熟悉的记录盲目赋值;先理解它的类型和脚本。表格关闭、记录删除或进程切换后,之前保存的对象引用可能不再适用,应重新查找,避免使用已经失效的记录。
符号与回归检查
符号可帮助脚本表达模块或分配内存的位置,但符号可能因脚本停用而消失。使用 getAddressSafe 检查可解析性,启停后分别确认符号状态。对 Tutorial 进行一次变化操作,观察 Value 是否同步;重新附加后再验证,不能仅凭一次显示相同就断言记录持久有效。
进一步验证
练习时可以对一条普通数值记录做只读观察:先打印描述、地址表达式及值,改变练习程序中的数值,再比较记录显示。随后暂停使用该记录,关闭目标程序,观察记录失效的表现。重新启动后重新寻找并更新记录。这个流程能帮助区分显示描述、地址表达式和实时值,也能避免把一个过期对象当成仍然有效的数据源。
普通记录的地址和值可以由用户在界面中直接修改,脚本读取的内容也会随之变化。对记录进行任何操作前,先检查它是数值记录还是脚本记录;即使名称相同,激活时产生的效果也可能不同。将实验记录按用途命名,并在结束后取消冻结,可以减少下次打开表格时误用旧状态的可能。
记录描述便于查找,但不能代替检查当前进程和真实地址。测试后清除不用的记录,并再次确认没有仍处于冻结状态的条目。