当前位置 : 主页 > 网络编程 > lua >

Lua __metatable绕过?

来源:互联网 收集:自由互联 发布时间:2021-06-23
我想知道是否有办法逃避__metatable元方法.我知道没有一个,但我正在尝试做这样的事情,但显然__metatable会阻止这种情况发生: -- pretend that there is a __metatable field given to a table setmetatable(_
我想知道是否有办法逃避__metatable元方法.我知道没有一个,但我正在尝试做这样的事情,但显然__metatable会阻止这种情况发生:

-- pretend that there is a __metatable field given to a table
    setmetatable(_G, {__index = {None="No indexes"}})
    -- error: (the string given to the __metatable metamethod)

我在这里尝试做的只是逃避__metatable字段,只是允许自己在_G上设置metatable,它已经有一个.
我知道这是不可能做到的,但是我想问一下是否还有机会绕过?

从Lua执行此操作的唯一方法是使用debug.setmetatable.

__metatable的重点是保护.调试库绕过了这种保护(和其他),当然应该谨慎使用.

网友评论