Auto Assembler 脚本基础

Auto Assembler 脚本基础

Auto Assembler(AA)把汇编指令与标签、内存分配等命令组合成可启用和关闭的脚本。本章介绍读写脚本的基本顺序,适合已经了解内存浏览器的读者。

打开编辑器与理解脚本

启动并附加 CE 自带 Tutorial,例如 32 位版本可能显示为 Tutorial-i386.exe,请以进程列表中的实际名称为准。从内存浏览器打开 Auto Assemble 窗口;也可将脚本加入地址表作为条目管理。先保存独立副本。AA 不是普通 Lua:它既接受汇编指令,也有 alloc、label、assert 等由 CE 处理的命令。编辑器直接执行脚本与表条目的启用、禁用生命周期也要区分。

表脚本一般以 [ENABLE] 和 [DISABLE] 分成两部分。启用负责验证前提、准备资源并修改;关闭负责按正确次序撤销。define 为文本定义名称,alloc 分配内存并关联符号,label 声明标签,registersymbol 将名称注册到 CE,unregistersymbol 撤销注册,dealloc 释放分配。分配或注册过的资源都应在关闭路径上有对应清理。

用最小练习理解符号

下面是结构示意,不修改现有代码;它仅展示资源生命周期,切勿依此假定任意进程都可分配成功:

[ENABLE]
alloc(practiceBuffer, 100)
registersymbol(practiceBuffer)

[DISABLE]
unregistersymbol(practiceBuffer)
dealloc(practiceBuffer)

在 Tutorial 进程中启用后,可以通过地址解析查看符号;禁用后确认符号不再可用。不同环境的分配权限和进程状态可能导致失败,应先检查附加对象与 CE 报错。地址表的脚本仅在对应进程有效,关闭目标进程后不能继续使用旧地址。

要观察数据而非只观察名称,可在 registersymbol(practiceBuffer) 后加入 practiceBuffer: 和 db 11 22 33 44 两行;启用后在内存浏览器跳转到该符号,查看四个字节。先关闭所有引用该缓冲区的脚本,再禁用此条目。对同名符号的重复启用应先确认前一次已经清理,否则会产生冲突。验证时记录看到的字节和禁用后的符号状态。

从模板走向可撤销修改

涉及原代码的脚本应先确认指令边界、原始字节和目标版本,用 assert 检查预期字节;失败时停止,不能为通过而删除检查。若要跳转至新代码,还要检查跳转实际长度及覆盖范围,重放被覆盖的完整指令,再回到正确位置。关闭时先恢复原字节,再撤销符号和内存;如果目标线程仍在执行分配区,释放还会产生竞态,需要设计安全停用方式。

练习验收:能解释一个名称何时可解析、禁用后资源为何不可继续使用,并对一份具体脚本逐项标出分配、注册、恢复、注销和释放的位置。

参考资料