lua - 在沙箱中加载非标准 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),所以如果我忽略了一些明显的东西,请原谅我。
解决方案
推荐阅读
- mysql - Microsoft SQL - 返回每个部门的男性、女性和总员工数量
- python-sphinx - 如何使用 sphinx-autodoc 引用字典?
- python - 使用神经网络训练泰坦尼克号幸存者问题时损失 nan 和恒定精度
- java - 查询 whereArrayContains() 和 whereIn() 都不起作用
- c++ - GNU Make 规则未从依赖项中检测 .o 文件
- javascript - 从对象数组中删除除最后一个相似键之外的所有键
- ios - Flutter - 插件,如何依赖 ios 本地 pod
- java - 使用来自 dto 的对象数组构建 HttpMethod POST 请求
- javascript - vanilla javascript:将父元素更改为输入
- c++ - 在我的代码中添加新变量以及一些操作后,堆栈粉碎检测到 C++