memory

任意内存地址的读写与特征扫描。与通过 script_global / script_local 访问游戏脚本变量槽的方式不同,本模块不负责解析 global 编号或脚本名。操作不当可能导致崩溃,请确保地址有效。

读取

memory.read_int(address)int

从指定地址读取 4 字节 int。

参数类型说明
addressuint64 / int内存地址
memory.read_float(address)float

从指定地址读取 float。

参数类型说明
addressuint64 / int内存地址
memory.read_byte(address)int

从指定地址读取 1 字节 (0-255)。

参数类型说明
addressuint64 / int内存地址
memory.read_string(address, max_len?)string

从指定地址读取 C 字符串。max_len 默认 256。

参数类型说明
addressuint64 / int字符串起始地址
max_lenint?最大读取长度(含终止符检测)
memory.read_vector3(address)float, float, float

从指定地址连续读取 3 个 float (x, y, z)。

参数类型说明
addressuint64 / int第一个 float 的地址

写入

memory.write_int(address, value)void

写入 4 字节 int。

参数类型说明
addressuint64 / int目标地址
valueint要写入的值
memory.write_float(address, value)void

写入 float。

参数类型说明
addressuint64 / int目标地址
valuefloat要写入的值
memory.write_byte(address, value)void

写入 1 字节。

参数类型说明
addressuint64 / int目标地址
valueint字节值 0~255

扫描与工具

memory.scan(pattern, module?)int?

IDA 风格模式扫描 (例如 "48 8B 05 ? ? ? ? 48 85 C0")。module 可选模块名,默认扫描主模块。返回匹配地址或 nil

参数类型说明
patternstring十六进制模式,未知字节用 ?
modulestring?模块名;省略则主模块
local addr = memory.scan("48 8B 05 ? ? ? ? 48 85 C0")
if addr then
    local resolved = memory.rip(addr + 3)
    log.info("找到: " .. string.format("0x%X", resolved))
end
memory.rip(address)int

RIP-relative 地址解析。读取 address 处的 4 字节偏移,返回 address + offset + 4

参数类型说明
addressuint64 / int指令中相对偏移的地址
memory.allocate(size)int

分配指定大小的 RWX 内存。返回内存地址。

参数类型说明
sizeint字节数
memory.free(address)void

释放由 memory.allocate 分配的内存。

参数类型说明
addressuint64 / int先前 allocate 返回的地址;0 忽略