让我们说我有嵌入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
或者例如我想禁用循环(两者for和while语句).
限制的名字全球可以创建或访问的变量很简单:只需使用具有适当元方法的环境中加载你的脚本__index和__newindex.
限制局部变量的名称需要一些深度攻击并且可能不值得,因为它们不会影响宿主程序.
限制关键字无法开箱即用,但可以通过一些简单的黑客来完成:
要删除某些关键字,只需在llex.c中的luaX_tokens中为相关字符串添加一个空格.这些关键字将可用于变量名称,并且相应的语法结构将无法访问并将引发错误.例如,为了消除环路,禁用for,while和repeat.你可能会留下in和until,但他们不会做任何事情.如果要动态执行此操作,请参阅此lua-l消息.
| 归档时间: |
|
| 查看次数: |
149 次 |
| 最近记录: |