Erlfuzz

https://gitcode.com/gh_mirrors/er/erlfuzz/overview

简介:

erlfuzz 是一个用于对 Erlang 编译器和虚拟机进行模糊测试的工具,目的是自动化发现潜在的编译和运行时错误。它生成随机的 Erlang 程序,并通过这些程序对相关工具(如 Erlang 编译器 erlc、虚拟机 BEAM、以及静态分析工具如 Dialyzer 等)进行测试。

主要功能

模糊测试:生成随机 Erlang 程序,并用于测试 Erlang 编译器(erlc)和虚拟机(BEAM)的健壮性。

生成和最小化测试用例:可以生成可能导致崩溃的最小化测试用例,帮助开发者定位问题。

多平台:支持 Linux 和 macOS

安装和构建

依赖

Rust(包括 Cargo)

一些额外的 Linux 工具:parallel, timeout, ulimit

构建命令: 在有网络的计算机上执行以下命令构建:

1
2
3
4
5
bash


复制代码
cargo build --release

使用方法

基本用法: 可以使用提供的脚本进行模糊测试。通过以下命令运行模糊测试:

1
2
3
4
5
6
7
bash


复制代码
mkdir -p out
mkdir -p interesting
seq 1000000 | parallel --line-buffer "./target/release/erlfuzz fuzz -c ./scripts/run_erl_debug.sh --tmp-directory out --interesting-directory interesting test{}"

这将使用 parallel 工具并行运行模糊测试,使用计算机上的所有核心。如果需要限制核心数(例如 5 核),可以添加 -j 5 参数。

其他工具脚本erlfuzz 还可以与其他工具(如 erlfmt, dialyzer, eqwalizer 等)结合使用,进行相应的模糊测试。每个工具可能需要额外的选项来避免在错误报告中出现不确定性数字(如时间戳、进程 ID 等)。

调试和日志

  • 如果 erlfuzz 本身出现问题,可以通过设置 RUST_LOG=debugRUST_LOG=trace 环境变量来获得详细的日志。
  • 可以调整不同模块的日志级别。例如:
1
2
3
4
bash

复制代码
RUST_LOG="warn,erlfuzz::reducer=info"

测试用例最小化

通过以下命令,可以减少已生成的测试用例的大小:

1
2
3
4
5
bash


复制代码
./target/release/erlfuzz reduce -c ./scripts/run_erl_debug.sh --tmp-directory out --minimized-directory minimized --seed 3137934125722527840 foobar

这将使用给定的种子值减少测试用例的大小。

erlfuzz 已经发现了 Erlang 和相关工具中的一些问题,并列出了具体的 GitHub 问题链接,帮助开发者查找和定位可能的错误:

BEAM VM:

erlc:

dialyzer:

erlfmt:

eqWAlizer:

inferl:

Gradualizer


Erlfuzz
https://jimi-lab.github.io/2024/11/01/Erlfuzz/
作者
Jimi
发布于
2024年11月1日
许可协议