原作者项目:C0ss4ck Cossack9989/lus4n: Generate lua call graph
这个项目主要做了一些 GUI 之类的工作和一些显示方面的调整,来满足个人使用
lus4n 是一个基于 AST (抽象语法树) 分析的 Lua 代码调用图生成工具。它可以扫描 Lua 代码文件,构建函数调用关系图,并支持查询和可视化特定函数的调用关系。
- Python 3.6 或更高版本
- pip 包管理工具
- 克隆仓库到本地
git clone https://github.com/lusipad/lus4n.git
- 进入项目目录
cd lus4n - 安装依赖包和 lus4n 工具
在 PowerShell 中执行:
pip install -e .
lus4n 支持以下功能:
lus4n 提供了直观的图形用户界面,可以通过以下命令启动:
python -m lus4n.gui图形界面包含以下功能:
-
扫描选项卡:用于扫描Lua代码并生成调用图
- 指定Lua代码路径
- 选择存储文件路径
- 自定义文件后缀
-
查询选项卡:用于查询和可视化函数调用关系
- 查询特定函数的调用关系
- 显示所有函数入口点(按调用次数排序)
- 记录最近查询历史
- 可视化设置功能:
- 多种布局选项(力导向布局、分层布局、圆形布局等)
- 节点筛选(文件节点显示、最大节点数限制)
- 基于节点重要性的大小和颜色调整
- 物理引擎控制选项
lus4n -p <Lua代码路径> -s <存储文件路径> [-e <文件后缀>]参数说明:
-p, --path: 指定要扫描的 Lua 代码路径(必需)-s, --storage: 指定生成的调用图数据存储文件路径(可选,如果不指定则存储在临时目录)-e, --extensions: 指定要扫描的文件后缀,多个后缀用逗号分隔(可选,默认为 ".lua")
示例:
# 使用默认后缀 .lua 进行扫描
lus4n -p ./rootfs/ -s ./result.jb
# 扫描 .lua 和 .luac 后缀的文件
lus4n -p ./rootfs/ -s ./result.jb -e ".lua,.luac"
# 扫描所有 .lc 后缀的文件
lus4n -p ./rootfs/ -s ./result.jb -e ".lc"lus4n -s <存储文件路径> -q <查询函数名>参数说明:
-s, --storage: 指定之前生成的调用图数据存储文件路径(必需)-q, --query: 指定要查询的函数名(必需)
示例:
lus4n -s ./result.jb -q os.execute执行查询后,lus4n 将自动打开浏览器显示调用图的可视化结果。
lus4n 提供了多种调用图可视化设置,使您能够更清晰地理解复杂的函数调用关系:
- 力导向布局:适合展示函数之间的有机关系,节点会根据连接自然分布
- 分层布局:以层次结构显示调用关系,有上到下和左到右两种方向选择
- 圆形布局:将节点排列在圆周上,适合查看全局结构
- 放射状布局:以查询函数为中心,放射状展开调用关系
- 文件节点显示:可选择是否显示文件节点,专注于函数调用关系
- 最大节点数限制:当节点过多时,根据重要性筛选显示最关键的节点
- 节点大小和颜色:
- 查询函数用橙色高亮显示
- 重要函数(被调用次数多的)显示为较大节点和较深颜色
- 文件节点显示为蓝色
- 普通函数根据重要性使用不同深浅的颜色
可以开启或关闭物理引擎效果,选择静态或动态显示方式。
查询后生成的调用图中:
- 不同节点代表不同的函数
- 边表示函数间的调用关系
- 可以直接在浏览器中交互,拖动、缩放调用图
- 悬停在节点上可查看详细信息,包括被调用次数
如果查询时显示 未找到节点:xxx,表示该函数在扫描的代码中未被找到。请检查:
- 函数名是否输入正确
- 该函数是否在扫描的代码路径中
- 调用图存储文件是否正确
如果调用关系图显示过于复杂难以理解:
- 使用"分层布局"选项查看更清晰的调用层次
- 减小"最大显示节点数",只关注最重要的节点
- 取消勾选"显示文件节点",专注于函数之间的关系
如果未指定存储文件路径,lus4n 将使用系统临时目录存储生成的调用图数据和可视化 HTML 文件。
lus4n 提供了简单的打包脚本,可以将应用程序打包为独立的可执行文件:
# 在项目根目录执行
.\build.ps1这将创建两个版本的应用程序:
- GUI版本(
lus4n-gui-windows.zip):包含图形用户界面 - 命令行版本(
lus4n-cli-windows.zip):用于命令行操作
打包后的文件位于 releases 目录中。
本项目使用 GitHub Actions 实现自动构建和发布。当你推送带有 v 前缀的标签(例如 v1.2.0)时,会自动触发构建流程:
# 创建新标签
git tag v1.2.0
# 推送标签到GitHub
git push origin v1.2.0构建完成后,GitHub 将自动创建一个新的 Release,并将打包好的应用程序上传到 Release 页面。
- 更新项目版本
- 出现语法错误时,使用正则匹配提取尽可能多的函数信息
- 将函数列表调整为列表显示
- 将最大节点数量调整为 1000
- 支持 GBK 格式的 lua 文件
- 添加图形用户界面
- 支持查询功能
- 基本的调用关系可视化
- 添加"显示所有函数入口"功能,按调用次数排序
- 增强调用图可视化功能,提供多种布局和节点样式选项
- 增加了本地打包支持
- 添加自动打包和发布功能,支持GitHub Actions自动构建