Thanks to visit codestin.com
Credit goes to github.com

Skip to content

lusipad/lus4n

Repository files navigation

lus4n

作者

原作者项目:C0ss4ck Cossack9989/lus4n: Generate lua call graph

这个项目主要做了一些 GUI 之类的工作和一些显示方面的调整,来满足个人使用

项目简介

lus4n 是一个基于 AST (抽象语法树) 分析的 Lua 代码调用图生成工具。它可以扫描 Lua 代码文件,构建函数调用关系图,并支持查询和可视化特定函数的调用关系。

安装方法

前提条件

  • Python 3.6 或更高版本
  • pip 包管理工具

安装步骤

  1. 克隆仓库到本地
    git clone https://github.com/lusipad/lus4n.git
  2. 进入项目目录
    cd lus4n
  3. 安装依赖包和 lus4n 工具 在 PowerShell 中执行:
    pip install -e .

使用方法

lus4n 支持以下功能:

1. 图形界面工具

lus4n 提供了直观的图形用户界面,可以通过以下命令启动:

python -m lus4n.gui

image-20250316085039060

image-20250316101936429

image-20250316085126885

图形界面包含以下功能:

  • 扫描选项卡:用于扫描Lua代码并生成调用图

    • 指定Lua代码路径
    • 选择存储文件路径
    • 自定义文件后缀
  • 查询选项卡:用于查询和可视化函数调用关系

    • 查询特定函数的调用关系
    • 显示所有函数入口点(按调用次数排序)
    • 记录最近查询历史
    • 可视化设置功能:
      • 多种布局选项(力导向布局、分层布局、圆形布局等)
      • 节点筛选(文件节点显示、最大节点数限制)
      • 基于节点重要性的大小和颜色调整
      • 物理引擎控制选项

2. 命令行工具

扫描 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,表示该函数在扫描的代码中未被找到。请检查:

  1. 函数名是否输入正确
  2. 该函数是否在扫描的代码路径中
  3. 调用图存储文件是否正确

调用关系图过于复杂

如果调用关系图显示过于复杂难以理解:

  1. 使用"分层布局"选项查看更清晰的调用层次
  2. 减小"最大显示节点数",只关注最重要的节点
  3. 取消勾选"显示文件节点",专注于函数之间的关系

临时文件位置

如果未指定存储文件路径,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 页面。

版本历史

v1.3.0 (2025-03-18)

  • 更新项目版本

v1.2.0 (2025-03-17)

  • 出现语法错误时,使用正则匹配提取尽可能多的函数信息
  • 将函数列表调整为列表显示

v1.1.0 (2025-03-16)

  • 将最大节点数量调整为 1000
  • 支持 GBK 格式的 lua 文件

v1.0.0 (2025-03-16)

  • 添加图形用户界面
  • 支持查询功能
  • 基本的调用关系可视化
  • 添加"显示所有函数入口"功能,按调用次数排序
  • 增强调用图可视化功能,提供多种布局和节点样式选项
  • 增加了本地打包支持
  • 添加自动打包和发布功能,支持GitHub Actions自动构建

About

Generate lua call graph

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •