LuaJIT-lint选件
我一直在研究LuaJIT-lint选件,lua,bytecode,luajit,Lua,Bytecode,Luajit,我一直在研究Lua的lint类util,并阅读了LuaInspect、LuaLint和MetaLlint。我使用的是LuaJIT-2.0.2,我的需求非常简单,我需要能够只检查MODNAME:function()类型的访问。除了MetaLint(需要MetaLua运行时)之外,其余的似乎都在进行字节码转储和解析,检查全局访问 因此,如果我想为我的源代码实现一个简单的实用程序,在类似的行中,我应该在luajit-b-l source.lua的输出中查找GGET和TGETS操作码,例如: 0019
Lua的lint
类util,并阅读了LuaInspect
、LuaLint
和MetaLlint
。我使用的是LuaJIT-2.0.2
,我的需求非常简单,我需要能够只检查MODNAME:function()
类型的访问。除了MetaLint
(需要MetaLua
运行时)之外,其余的似乎都在进行字节码转储和解析,检查全局访问
因此,如果我想为我的源代码实现一个简单的实用程序,在类似的行中,我应该在luajit-b-l source.lua
的输出中查找GGET
和TGETS
操作码,例如:
0019 GGET 4 1 ; "MODNAME"
0020 TGETS 4 4 8 ; "function"
是否有更好的替代方案/方法
谢谢。你到底想做什么?也许您可以使用Lua调试库做一些事情,例如debug.sethook()。我想对代码进行静态检查,以确保只调用[我正在添加的]已知模块/函数。这将在luaL\u loadfile
之后完成。调试钩子,AFAIK,是运行时的!好的,那么要么像您所展示的那样检查字节码,要么使用代码中可用的各种Lua解析器之一来检测。@catwell您指的是Lua源解析器,还是字节码列表解析器?我指的是源解析器。您可以从AST或一些中间表示中找到。