prog-fuzz 使用教程
项目介绍
prog-fuzz
是一个针对编译器和源代码的模糊测试工具,使用 AFL(American Fuzzy Lop)进行插桩和分支覆盖率计算。该项目旨在通过生成随机的、但语法正确的程序代码来发现编译器中的潜在错误。
项目快速启动
安装
首先,克隆项目仓库到本地:
git clone https://github.com/vegard/prog-fuzz.git
cd prog-fuzz
编译
使用以下命令进行编译:
make
运行
编译完成后,可以使用以下命令启动模糊测试:
./prog-fuzz -i input -o output -- gcc -o test test.c
其中,-i input
指定输入目录,-o output
指定输出目录,-- gcc -o test test.c
指定要测试的编译器和编译命令。
应用案例和最佳实践
应用案例
prog-fuzz
已被用于发现多个编译器的错误,包括 GCC、Rust 和 LLVM/clang。例如,通过 prog-fuzz
发现了超过 100 个 GCC 错误、8 个 Rust 编译器错误和 9 个 LLVM/clang 错误。
最佳实践
- 选择合适的输入目录:确保输入目录包含一些初始的测试用例,以便
prog-fuzz
可以从中生成更多的测试用例。 - 监控输出目录:定期检查输出目录中的新测试用例和发现的错误,以便及时修复。
- 调整测试参数:根据需要调整
prog-fuzz
的参数,例如增加测试时间或增加生成的测试用例数量。
典型生态项目
Csmith
Csmith 是一个随机 C 程序生成器,常用于编译器测试。与 prog-fuzz
类似,Csmith 也可以生成语法正确的 C 程序,用于发现编译器中的错误。
yarpgen
yarpgen 是一个随机程序生成器,专门用于编译器和优化器的测试。yarpgen 可以生成复杂的程序结构,用于测试编译器的优化能力。
通过结合 prog-fuzz
和其他生态项目,可以更全面地测试编译器的各个方面,从而提高编译器的稳定性和性能。