| Crates.io | alaz |
| lib.rs | alaz |
| version | 0.1.1 |
| created_at | 2025-11-12 03:21:00.311954+00 |
| updated_at | 2025-11-13 03:57:41.793012+00 |
| description | AArch64 汇编语言分析工具 - 支持237条指令、多优化级别对比、智能语义解释 |
| homepage | https://github.com/xjz6626/Assembly-Language-Analyzer |
| repository | https://github.com/xjz6626/Assembly-Language-Analyzer |
| max_upload_size | |
| id | 1928740 |
| size | 228,331 |
ALAZ (Assembly Language Analyzer) 是一个强大的 AArch64 汇编语言分析工具,用于解析 objdump 输出文件并生成美观的 Markdown 分析报告。
ALAZ v0.1.1 支持 237 条 AArch64 指令,涵盖:
csel, csinc, cset 等(11条)- 新增fmla/fmls、转换、取整(35+条)ldadd, cas, swp 及字节/半字变体(24+条)aese/aesd), SHA-1, SHA-256(10+条)crc32b/h/w/x 系列(5条)adr/adrp - 新增ubfiz, sbfiz, extr - 新增# 克隆仓库
git clone https://github.com/xjz6626/Assembly-Language-Analyzer.git
cd Assembly-Language-Analyzer
# 编译并安装
cargo install --path .
# 或者只编译
cargo build --release
# 可执行文件位于 target/release/alaz
cargo install alaz
首先,使用 objdump 生成反汇编文件:
# 编译不同优化级别的代码
gcc -O0 -g -c matrix.c -o matrix_O0.o
gcc -O1 -g -c matrix.c -o matrix_O1.o
gcc -O2 -g -c matrix.c -o matrix_O2.o
# 生成 dump 文件
objdump -d -S matrix_O0.o > matrix_O0.dump
objdump -d -S matrix_O1.o > matrix_O1.dump
objdump -d -S matrix_O2.o > matrix_O2.dump
# 多文件模式 - 分析三个优化级别的共同函数
alaz interactive matrix
# 单文件模式 - 只分析一个 dump 文件
alaz interactive -s matrix_O2.dump
# 分析 Matrix_add 函数,生成对比报告
alaz analyze Matrix_add matrix
# 指定输出目录
alaz analyze Matrix_mul matrix -o ./reports
alaz --help # 查看帮助信息
alaz interactive <FILE> # 交互式模式
alaz analyze <FUNC> <PREFIX> # 直接分析
alaz completions <SHELL> # 生成补全脚本
分析三个优化级别的共同函数,生成对比报告:
# 使用文件前缀
alaz interactive matrix
# 或显式指定多文件模式
alaz interactive -m matrix
# 指定输出目录
alaz interactive matrix -o ./output
特点:
matrix_O0.dump, matrix_O1.dump, matrix_O2.dump<函数名>_comparison.md 对比报告只分析一个 dump 文件:
# 分析 O2 优化级别的文件
alaz interactive -s matrix_O2.dump
# 分析 O0 优化级别的文件
alaz interactive -s matrix_O0.dump
特点:
<函数名>_analysis.md 分析报告不使用交互菜单,直接分析指定函数:
# 基本用法
alaz analyze Matrix_add matrix
# 指定输出目录
alaz analyze Matrix_mul matrix -o ./reports
# 启用详细日志
alaz analyze -v Matrix_inv matrix
生成并安装 shell 补全脚本:
# Bash
alaz completions bash > ~/.local/share/bash-completion/completions/alaz
# Fish
alaz completions fish > ~/.config/fish/completions/alaz.fish
# Zsh
alaz completions zsh > ~/.zsh/completion/_alaz
# PowerShell
alaz completions powershell > alaz.ps1
生成的 Matrix_add_comparison.md 文件格式:
# Matrix_add 函数对比分析
## O0 优化级别
| 地址 | 机器码 | 汇编指令 | 语义解释 | C代码 |
|------|--------|----------|----------|-------|
| 0x1000 | 910003fd | sub sp, sp, #0x10 | 分配16字节栈空间 | { |
| 0x1004 | f9000fe0 | str x0, [sp, #24] | 保存参数x0到栈 | |
## O1 优化级别
| 地址 | 机器码 | 汇编指令 | 语义解释 | C代码 |
|------|--------|----------|----------|-------|
| ... | ... | ... | ... | ... |
## O2 优化级别
| 地址 | 机器码 | 汇编指令 | 语义解释 | C代码 |
|------|--------|----------|----------|-------|
| ... | ... | ... | ... | ... |
alaz/
├── src/
│ ├── main.rs # 命令行入口和交互模式
│ ├── lib.rs # 库入口
│ ├── instruction.rs # 指令定义和解释
│ ├── register.rs # 寄存器定义
│ ├── parser.rs # 汇编代码解析器
│ ├── semantic.rs # 语义分析器
│ ├── objdump.rs # objdump 文件解析
│ ├── table.rs # 表格生成器
│ └── error.rs # 错误类型定义
├── aarch64_instructions.json # 指令集定义
├── Cargo.toml # 项目配置
└── README.md # 项目文档
[Xn] # 基址寻址
[Xn, #imm] # 基址+偏移
[Xn, #imm]! # 前索引 (先更新基址,再访问)
[Xn], #imm # 后索引 (先访问,再更新基址)
[Xn, Xm] # 寄存器偏移
[Xn, Wm, uxtw #3] # 扩展寄存器偏移
ALAZ 会为每条指令生成详细的中文语义解释:
| 指令 | 语义解释 |
|---|---|
sub sp, sp, #0x30 |
分配48字节栈空间 |
stp x29, x30, [sp, #-64]! |
将x29和x30压栈(前索引,先sp-=64再存储) |
ldr x0, [sp, #24] |
从sp+24地址加载8字节到x0 |
add w0, w1, w2 |
w0 = w1 + w2 |
csel x0, x1, x2, eq |
条件选择,如果相等选择x1,否则选择x2 |
adrp x0, label |
将PC相对页地址加载到x0(用于访问全局变量) |
fmla v0.4s, v1.4s, v2.4s |
浮点融合乘加,v0 = v0 + v1 * v2 |
ldadd w1, w2, [x0] |
原子加法,将w1的值加到内存[x0],原值加载到w2 |
cmp x0, #0 |
比较x0与0,更新条件标志 |
b.eq 1234 |
如果相等(Z=1)则跳转到0x1234 |
bl function |
调用函数(保存返回地址到LR) |
ret |
返回(跳转到LR保存的地址) |
csel, csinc, csinv, csneg, cset, csetm, cinc, cinv, cneg, ccmp, ccmnadr, adrp - 访问全局变量和 GOT/PLTubfiz, sbfiz, extr - 高效位操作fmla, fmlsfmin, fmax, fminnm, fmaxnmfcvtas, fcvtau, fcvtms, fcvtmu, fcvtns, fcvtnu, fcvtps, fcvtpufrinta, frinti, frintm, frintn, frintp, frintx, frintzuaddlv, saddlvins, dup, cntsqadd, uqadd, sqsub, uqsubshl, sshr, ushrsxtl, uxtluzp2, trn2ldaddh, ldaddb, casa, casb, cash, casp, stadd, 等ldxrb, ldxrh, stxrb, stxrh, ldaxrb, ldaxrh, ldxp, stxp, 等eret, drps比较不同优化级别下的代码生成差异:
alaz interactive mycode
# 查看 O0/O1/O2 的优化差异
通过语义解释快速理解汇编指令:
alaz interactive -s example.dump
# 浏览并学习每条指令的含义
分析热点函数的汇编实现:
alaz analyze hot_function mycode -o ./analysis
生成可读性强的汇编报告用于代码审查:
alaz analyze critical_function security_lib
欢迎贡献!以下是一些可以改进的方向:
git checkout -b feature/AmazingFeature)git commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。
Happy Analyzing! 🎉