Lua:获取函数源代码
2013-12-15 20:13:20
收藏:0
阅读:282
评论:2
我正在开发一个序列化/反序列化系统,并尝试利用函数创建一些高级的功能。我的目标是以可读和可逆的方式序列化包含函数的对象(加载loadfile()后需要处理序列化文件)。我需要一种获取函数实际源代码的方法,似乎不能始终通过debug.getinfo()实现。
我知道debug.getinfo()将给出函数定义的文件和行(或者函数的源代码,这取决于其来源)。有没有一种方法可以从该文件中读取函数文本呢?我愿意使用某种解析器工具来实现。也许有用于解析Lua代码的Lua包?
也许有一种方法可以使loadfile()或require()自动保留函数源代码的位置?
是的,我知道可以从debug.getinfo()中获取各种信息,但它不能处理通过stdin加载的函数...
uberblah@glade-m:~$ lua
Lua 5.1.5 Copyright (C) 1994-2012 Lua.org, PUC-Rio
> a = function() print("hello, world!") end
> require("serpent")
> s = require("serpent")
> =s.block(debug.getinfo(a))
{
currentline = -1,
func = loadstring("LuaQ\000\000\000\000\000\000\000\000\000=stdin\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000A@\000\000@\000\000�\000\000\000\000\000\000\000\000\000\000\000print\000\000\000\000\000\000\000\000hello, world!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000",'@serialized') --[[function: 0x2068a30]],
lastlinedefined = 1,
linedefined = 1,
namewhat = "",
nups = 0,
short_src = "stdin",
source = "=stdin",
what = "Lua"
} --[[table: 0x206cf80]]
> f = io.open("stdin", "r")
> =f
nil
从stdin中获取源代码的解决方案...
1)捕获所有stdin,将其写入文件。
2)从该文件中加载信息,而不是从stdin中加载。
3)debug将跟踪该文件中的函数行数。
点赞
用户107090
使用 debug.getinfo 函数,可以获取到 source、linedefined 和 lastlinedefined 这些信息。除非你的代码被格式化得很奇怪,否则你可以通过这些信息完整地提取函数的代码。没有必要解析代码,只需要获取正确的行集合即可。
2013-12-05 01:47:47
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
你想将 Lua 字节码反汇编为语句和表达式。可以尝试使用 http://chunkspy.luaforge.net/ 或者 http://luadec.luaforge.net/。不过我没有使用过它们,因此无法提供更多信息。
Luac(Lua 编译器)也有-l开关,可以输出汇编清单,理论上可以解析。另外还有lbci(bhttp://www.tecgraf.puc-rio.br/~lhf/ftp/lua/#lbci)。你可能会发现这篇文章 Getting the AST of a function 很有用。最后,建议你搜索一下“lua decompiler”。