gpt4 book ai didi

c++ - LuaL_openlibs() 和沙盒脚本

转载 作者:可可西里 更新时间:2023-11-01 16:25:49 27 4
gpt4 key购买 nike

我正在将 Lua (5.1) 嵌入到 C/C++ 应用程序中。

我正在使用 LuaL_openlibs() 函数加载基础库。但是,此函数加载了一些我想禁用的其他库,以便我的 Lua 脚本无法使用它们。

具体来说,我想禁用 IO 和 OS 模块。有没有我可以调用的函数来以编程方式禁用(或卸载)这些模块,以便我可以创建一个安全的沙箱环境来运行 Lua 脚本?

最佳答案

luaL_openlibs 只是遍历在同一个文件中声明的库加载器列表。只需删除/注释掉 luaopen_ioluaopen_os 行。完成。

如果您不喜欢编辑 Lua 源代码,那么您可以定义自己的函数,省去这两个库:

#define LUA_LIB

#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"

static const luaL_Reg lualibs[] = {
{"", luaopen_base},
{LUA_LOADLIBNAME, luaopen_package},
{LUA_TABLIBNAME, luaopen_table},
{LUA_STRLIBNAME, luaopen_string},
{LUA_MATHLIBNAME, luaopen_math},
{LUA_DBLIBNAME, luaopen_debug},
{NULL, NULL}
};

LUALIB_API void my_openlibs (lua_State *L) {
const luaL_Reg *lib = lualibs;
for (; lib->func; lib++) {
lua_pushcfunction(L, lib->func);
lua_pushstring(L, lib->name);
lua_call(L, 1, 0);
}
}

关于c++ - LuaL_openlibs() 和沙盒脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4551101/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com