memory
对任意内存地址的读写与特征扫描。与通过 script_global / script_local 访问游戏脚本变量槽的方式不同,本模块不负责解析 global 编号或脚本名。操作不当可能导致崩溃,请确保地址有效。
读取
memory.read_int(address)int
从指定地址读取 4 字节 int。
| 参数 | 类型 | 说明 |
|---|---|---|
| address | uint64 / int | 内存地址 |
memory.read_float(address)float
从指定地址读取 float。
| 参数 | 类型 | 说明 |
|---|---|---|
| address | uint64 / int | 内存地址 |
memory.read_byte(address)int
从指定地址读取 1 字节 (0-255)。
| 参数 | 类型 | 说明 |
|---|---|---|
| address | uint64 / int | 内存地址 |
memory.read_string(address, max_len?)string
从指定地址读取 C 字符串。max_len 默认 256。
| 参数 | 类型 | 说明 |
|---|---|---|
| address | uint64 / int | 字符串起始地址 |
| max_len | int? | 最大读取长度(含终止符检测) |
memory.read_vector3(address)float, float, float
从指定地址连续读取 3 个 float (x, y, z)。
| 参数 | 类型 | 说明 |
|---|---|---|
| address | uint64 / int | 第一个 float 的地址 |
写入
memory.write_int(address, value)void
写入 4 字节 int。
| 参数 | 类型 | 说明 |
|---|---|---|
| address | uint64 / int | 目标地址 |
| value | int | 要写入的值 |
memory.write_float(address, value)void
写入 float。
| 参数 | 类型 | 说明 |
|---|---|---|
| address | uint64 / int | 目标地址 |
| value | float | 要写入的值 |
memory.write_byte(address, value)void
写入 1 字节。
| 参数 | 类型 | 说明 |
|---|---|---|
| address | uint64 / int | 目标地址 |
| value | int | 字节值 0~255 |
扫描与工具
memory.scan(pattern, module?)int?
IDA 风格模式扫描 (例如 "48 8B 05 ? ? ? ? 48 85 C0")。module 可选模块名,默认扫描主模块。返回匹配地址或 nil。
| 参数 | 类型 | 说明 |
|---|---|---|
| pattern | string | 十六进制模式,未知字节用 ? |
| module | string? | 模块名;省略则主模块 |
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))
endmemory.rip(address)int
RIP-relative 地址解析。读取 address 处的 4 字节偏移,返回 address + offset + 4。
| 参数 | 类型 | 说明 |
|---|---|---|
| address | uint64 / int | 指令中相对偏移的地址 |
memory.allocate(size)int
分配指定大小的 RWX 内存。返回内存地址。
| 参数 | 类型 | 说明 |
|---|---|---|
| size | int | 字节数 |
memory.free(address)void
释放由 memory.allocate 分配的内存。
| 参数 | 类型 | 说明 |
|---|---|---|
| address | uint64 / int | 先前 allocate 返回的地址;0 忽略 |