首页 > 解决方案 > 在沙箱中加载非标准 lua 库(Lua 5.1/Luajit)

问题描述

我正在尝试让自己熟悉 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),所以如果我忽略了一些明显的东西,请原谅我。

标签: luasandboxluajitlua-5.1

解决方案


推荐阅读