Skip to content

Memory IO

native.memory provides a comprehensive set of memory read/write interfaces, supporting integers, floating-point numbers, and raw byte arrays.

All addr parameters in the interfaces support:

  • LuaPointer object
  • number (Address value)
  • string (Hexadecimal string)

Read/Write Integers

Basic Types Table

Bit WidthTypeRead InterfaceWrite InterfaceRange/Note
8-bitUnsignedread_u8write_u80 ~ 255
Signedread_s8write_s8-128 ~ 127
16-bitUnsignedread_u16write_u160 ~ 65535
Signedread_s16write_s16-32768 ~ 32767
32-bitUnsignedread_u32write_u32Lua number (UInt32)
Signedread_s32write_s32Lua number (Int32)
64-bitUnsignedread_u64write_u64Returns LuaPointer to preserve precision
Signedread_s64write_s64Returns LuaPointer to preserve precision
PointerPointerread_ptrwrite_ptrAuto-adapts to 32/64 bit architecture

Interface Definition

Read:

lua
native.memory.read_u32(addr, [offset]) -> number
  • offset: Optional, offset from addr, default is 0.

Write:

lua
native.memory.write_u32(addr, value, [offset]) -> boolean
  • value: Numerical value to write.
  • Returns: true indicates write success.

Example:

lua
local buf = native.memory.alloc(16)

-- Write
native.memory.write_u32(buf, 0x1234, 0)
native.memory.write_s64(buf, 0x1122334455667788, 4)

-- Read
local val = native.memory.read_u32(buf, 0) -- 0x1234
local val64 = native.memory.read_s64(buf, 4) -- Returns LuaPointer

native.memory.free(buf)

Read/Write Floating Point

TypeRead InterfaceWrite Interface
Float (32-bit)read_f32write_f32
Double (64-bit)read_f64write_f64

Example:

lua
native.memory.write_f32(addr, 3.14, 0)
local pi = native.memory.read_f32(addr, 0)

Read/Write Byte Array

Used for batch reading or writing raw binary data.

Read Array (read_byte_array)

lua
native.memory.read_byte_array(addr, size, [offset]) -> table | nil
  • size: Number of bytes to read.
  • Returns: Lua table containing [1..size] integers between 0-255.

Write Array (write_byte_array)

lua
native.memory.write_byte_array(addr, table, [offset]) -> boolean
  • table: Lua table containing byte data.

Example:

lua
-- Write HEX: 41 42 43
native.memory.write_byte_array(addr, {0x41, 0x42, 0x43})

-- Read
local bytes = native.memory.read_byte_array(addr, 3)
-- bytes[1] == 65

Made with ❤️