mintrt 0.1.2

Security-featured runtime for lua.
Documentation
保证要加载的rb(executor)不带函数调用,只有声明
$ luac -l -p nocalling.rbo

main <?:0,0> (4 instructions at 000002064b78b960)
0+ params, 2 slots, 1 upvalue, 0 locals, 1 constant, 1 function
        1       [-]     VARARGPREP      0
        2       [-]     CLOSURE         0 0     ; 000002064b7937b0
        3       [-]     SETTABUP        0 0 0   ; - "called_later"
        4       [-]     RETURN          0 1 1   ; 0 out

function <?:1,3> (4 instructions at 000002064b7937b0)
0 params, 2 slots, 1 upvalue, 0 locals, 2 constants, 0 functions
        1       [-]     GETTABUP        0 0 0   ; - "print"
        2       [-]     LOADK           1 1     ; "hi"
        3       [-]     CALL            0 2 1   ; 1 in 0 out
        4       [-]     RETURN0

$ cat test.lua
function called_later()
print("hi")
end

$ luac -l -p call.rbo

main <?:0,0> (9 instructions at 000002b8fea3fe50)
0+ params, 2 slots, 1 upvalue, 0 locals, 4 constants, 0 functions
        1       [-]     VARARGPREP      0
        2       [-]     GETTABUP        0 0 0   ; - "print"
        3       [-]     LOADK           1 1     ; "hello!"
        4       [-]     CALL            0 2 1   ; 1 in 0 out
        5       [-]     GETTABUP        0 0 2   ; - "fn_a"
        6       [-]     CALL            0 1 1   ; 0 in 0 out
        7       [-]     GETTABUP        0 0 3   ; - "fn_b"
        8       [-]     CALL            0 1 1   ; 0 in 0 out
        9       [-]     RETURN          0 1 1   ; 0 out

所以要保证 main 函数没有 call 指令

lua vm源码: