Lua,我可以从C++中禁用部分语言吗?

luk*_*nis 4 c++ lua

让我们说我有嵌入C++应用程序的Lua.这个问题可能听起来很奇怪,但我很感兴趣,是否有一种标准方法可以禁用C++端的Lua功能?

例如,我想禁用新的变量创建,除了一些定义,如下所示:

local time = 10
local size = 20
function test()
  return time * size
end
Run Code Online (Sandbox Code Playgroud)

如果我定义除了和函数以外的任何东西time,我想让Lua VM失败.这可能不会破坏虚拟机本身吗?sizetest

或者例如我想禁用循环(两者forwhile语句).

lhf*_*lhf 5

限制的名字全球可以创建或访问的变量很简单:只需使用具有适当元方法的环境中加载你的脚本__index__newindex.

限制局部变量的名称需要一些深度攻击并且可能不值得,因为它们不会影响宿主程序.

限制关键字无法开箱即用,但可以通过一些简单的黑客来完成:

要删除某些关键字,只需在llex.c中的luaX_tokens中为相关字符串添加一个空格.这些关键字将可用于变量名称,并且相应的语法结构将无法访问并将引发错误.例如,为了消除环路,禁用for,whilerepeat.你可能会留下inuntil,但他们不会做任何事情.如果要动态执行此操作,请参阅此lua-l消息.