17个版本
0.4.7 | 2023年8月10日 |
---|---|
0.4.6 | 2023年1月26日 |
0.4.5 | 2022年10月18日 |
0.4.3 | 2022年3月3日 |
0.1.1 | 2019年9月10日 |
#24 in 开发工具
每月378,025次下载
在43 个crate中使用了(11 个直接使用)
380KB
8K SLoC
libfuzzer-sys
Crate
对LLVM的libFuzzer运行时库的简单包装。
CPP部分是从compiler-rt git仓库通过git filter-branch
提取的。
libFuzzer依赖于LLVM sanitizer支持。目前,Rust编译器内置了对LLVM sanitizer的支持,但仅限于Linux。因此,libfuzzer-sys
只适用于Linux。
用法
使用cargo fuzz
!
手动使用
此crate也可以按照以下方式手动使用
首先创建一个新的cargo项目
$ cargo new --bin fuzzed
$ cd fuzzed
然后添加对fuzzer-sys
crate和您自己的crate的依赖
[dependencies]
libfuzzer-sys = "0.4.0"
your_crate = { path = "../path/to/your/crate" }
将fuzzed/src/main.rs
更改为fuzz您的代码
#![no_main]
use libfuzzer_sys::fuzz_target;
fuzz_target!(|data: &[u8]| {
// code to fuzz goes here
});
通过运行以下命令进行构建
$ cargo rustc -- \
-C passes='sancov' \
-C llvm-args='-sanitizer-coverage-level=3' \
-C llvm-args='-sanitizer-coverage-inline-8bit-counters' \
-Z sanitizer=address
最后,运行fuzzer
$ ./target/debug/fuzzed
链接到本地libfuzzer
使用libfuzzer-sys
时,您可以通过两种方式提供自己的libfuzzer
运行时。
如果您正在开发一个模糊测试工具,可以将环境变量 CUSTOM_LIBFUZZER_PATH
设置为您本地 libfuzzer
运行时的路径,这样就会在 libfuzzer-sys
的构建阶段链接到该路径,而不是构建 libfuzzer。例如,要链接到一个预构建的 LLVM 16 libfuzzer
,可以使用以下命令:
$ export CUSTOM_LIBFUZZER_PATH=/usr/lib64/clang/16/lib/libclang_rt.fuzzer-x86_64.a
$ cargo fuzz run ...
或者,您也可以禁用默认的 link_libfuzzer
功能
在 Cargo.toml
中
[dependencies]
libfuzzer-sys = { path = "../../libfuzzer", default-features = false }
然后在您的 build.rs
中链接到您自己的运行时。
从上游更新 libfuzzer
./update-libfuzzer.sh <github.com/llvm-mirror/llvm-project SHA1>
许可证
libfuzzer
目录中的所有文件都许可为 NCSA。
其他所有内容都双重许可 Apache 2.0 和 MIT。
依赖关系
~115–445KB