跳转到内容

core.base.libc

此模块提供低级 C 库操作,用于直接内存操作。

提示

使用此模块需要先导入:import("core.base.libc")

此模块封装了标准 C 库的内存分配、复制和操作函数。它提供了一致的接口,适用于标准 Lua 和使用 FFI 的 LuaJIT。

注意

这些函数在底层操作,应谨慎使用。使用不当可能导致内存泄漏、崩溃或安全隐患。

libc.malloc

  • 分配内存

函数原型

API

lua
libc.malloc(size: <number>, opt?: <table>)

参数说明

参数描述
size必需。要分配的内存大小(字节)
opt可选。选项表格,支持:
- gc - 如果为 true,内存将自动垃圾回收

返回值说明

类型描述
userdata返回指向分配内存的指针

用法说明

lua
import("core.base.libc")

-- 分配内存并启用垃圾回收
local data = libc.malloc(1024, {gc = true})

-- 分配内存但不自动回收
local data = libc.malloc(1024)

libc.free

  • 释放已分配的内存

函数原型

API

lua
libc.free(data: <userdata>)

参数说明

参数描述
data必需。要释放的内存指针

返回值说明

无返回值

用法说明

lua
import("core.base.libc")

local data = libc.malloc(1024)
-- ... 使用 data ...
libc.free(data)

libc.memcpy

  • 复制内存

函数原型

API

lua
libc.memcpy(dst: <userdata>, src: <userdata>, size: <number>)

参数说明

参数描述
dst必需。目标内存指针
src必需。源内存指针
size必需。要复制的字节数

返回值说明

无返回值

用法说明

lua
import("core.base.libc")

local src = libc.malloc(100)
local dst = libc.malloc(100)
libc.memcpy(dst, src, 100)

libc.memmov

  • 移动内存(处理重叠区域)

函数原型

API

lua
libc.memmov(dst: <userdata>, src: <userdata>, size: <number>)

参数说明

参数描述
dst必需。目标内存指针
src必需。源内存指针
size必需。要移动的字节数

返回值说明

无返回值

用法说明

lua
import("core.base.libc")

local data = libc.malloc(100)
libc.memmov(data, src, 100)

libc.memset

  • 将内存设置为特定值

函数原型

API

lua
libc.memset(data: <userdata>, ch: <number>, size: <number>)

参数说明

参数描述
data必需。要填充的内存指针
ch必需。要设置的字节值
size必需。要设置的字节数

返回值说明

无返回值

用法说明

lua
import("core.base.libc")

local data = libc.malloc(1024)
libc.memset(data, 0, 1024)  -- 零初始化内存

libc.strndup

  • 复制字符串(指定长度)

函数原型

API

lua
libc.strndup(s: <string>, n: <number>)

参数说明

参数描述
s必需。源字符串
n必需。要复制的最大字符数

返回值说明

类型描述
string返回复制的字符串

用法说明

lua
import("core.base.libc")

local str = "hello world"
local dup = libc.strndup(str, 5)  -- 返回 "hello"

libc.byteof

  • 获取特定偏移处的字节

函数原型

API

lua
libc.byteof(data: <userdata>, offset: <number>)

参数说明

参数描述
data必需。内存指针
offset必需。距内存起始位置的字节偏移

返回值说明

类型描述
number返回偏移处的字节值

用法说明

lua
import("core.base.libc")

local data = libc.malloc(100)
local byte = libc.byteof(data, 10)

libc.setbyte

  • 在特定偏移处设置字节

函数原型

API

lua
libc.setbyte(data: <userdata>, offset: <number>, value: <number>)

参数说明

参数描述
data必需。内存指针
offset必需。距内存起始位置的字节偏移
value必需。要设置的字节值

返回值说明

无返回值

用法说明

lua
import("core.base.libc")

local data = libc.malloc(100)
libc.setbyte(data, 10, 255)

libc.dataptr

  • 获取数据指针

函数原型

API

lua
libc.dataptr(data: <any>, opt?: <table>)

参数说明

参数描述
data必需。要获取指针的数据
opt可选。选项表格,支持:
- ffi - 如果可用则使用 FFI(默认: true)
- gc - 启用垃圾回收

返回值说明

类型描述
userdata返回指向数据的指针

用法说明

lua
import("core.base.libc")

local ptr = libc.dataptr(data, {ffi = true, gc = true})

libc.ptraddr

  • 获取指针地址(作为数字)

函数原型

API

lua
libc.ptraddr(data: <userdata>, opt?: <table>)

参数说明

参数描述
data必需。指针或数据
opt可选。选项表格,支持:
- ffi - 如果可用则使用 FFI(默认: true)

返回值说明

类型描述
number返回指针地址(作为数字)

用法说明

lua
import("core.base.libc")

local data = libc.malloc(1024)
local addr = libc.ptraddr(data)
print("指针地址:", addr)