在沙箱中加载非标准lua库(Lua 5.1 / Luajit)

时间:2019-06-21 10:35:13

标签: lua sandbox luajit lua-5.1

我正在尝试使自己熟悉lua,并且为此而玩弄编码游戏berrybots(http://berrybots.com/)。它使用C ++引擎,并且用户/玩家可以提供lua脚本来编写自己的“机器人AI”以与其他机器人作战。

我正在编写自己的机器人,但我想使用一些数字密集型的想法,因此我需要在沙盒用户中导入/要求一个外部数字图书馆(我猜是numlua,https://github.com/carvalho/numlua)脚本。我不介意修改berrybots的原始代码以使其工作,并且我已经假定沙箱中没有解决办法(但也许可以吗?)。

在C ++端,将启动沙箱并加载标准库

*state = luaL_newstate();
lua_setcwd(*state, stateCwd);
luaL_openlibs(*state)

我也想加载numlua库,通常可以使用以下命令将其导入任何lua脚本中

require "numlua"

但显然不在沙箱中。

我知道luaL_register用于注册C函数,但是我无法使其工作,我认为应该有一种更简单的方法来导入numlua,而无需返回numlua的C API。

我不在乎该解决方案是否会带来安全风险,因为我只是打算自己使用它。为了完整起见,尽管有一个(合理的)安全解决方案也很好。

我是lua的新手(主要熟悉Python / Cython / C),所以如果我忽略了一些明显的内容,请原谅我。

0 个答案:

没有答案