Skip to content

eglib.memory

路径: eglib.memory

直接内存访问方法。

方法

memory:new_ptr(address: number | string | LuaPtr) -> LuaPtr

返回: LuaPtr

创建一个新的LuaPtr包装给定的地址值。

可接受的地址值:

  • 表示内存地址的数字。例如 0x12345678(十六进制) 12345678(十进制)
  • 表示内存地址的字符串。例如 "0x12345678"(十六进制必须以"0x"开头) "12345678"(十进制)
  • 另一个LuaPtr对象。

memory:patch(ptr: AsLuaPtr, bytes: List<u8>)

用给定的字节修补指定地址的内存。

支持修补只读区域,如指令、数据和代码。

TIP

此指令会存储原始字节,可以通过memory:restore_patch手动恢复。

当REFramework脚本重新加载时,所有修补将被自动恢复

WARNING

多次修补同一内存区域会引发错误。

memory:patch_nop(ptr: AsLuaPtr, size: usize)

用NOP指令(Windows AMD64中为0x90)修补指定地址的内存。

memory:restore_patch(ptr: AsLuaPtr) -> bool

返回: 如果修补成功恢复则返回true

在修补后恢复指定地址的原始字节。

如果只是想重新加载脚本时恢复修补,则不需要调用此方法。修补会自动恢复。

WARNING

此方法目前不是线程安全的。建议在hook或其他线程安全函数中运行。