5个版本 (1个稳定版本)
1.0.0 | 2024年1月13日 |
---|---|
1.0.0-rc.1 | 2023年11月29日 |
0.1.2 | 2022年7月3日 |
0.1.1 | 2022年7月3日 |
0.1.0 | 2022年6月17日 |
#369 在 硬件支持
26KB
288 行
嵌入式-hal-fuzz
嵌入式Rust硬件驱动程序的模糊测试库。有关详细信息,请参阅文档。
功能状态
- I²C(读取,写入读取)
- SPI(全双工,写入,写入迭代器,事务性)
- 无操作延迟
- 串行
- I/O引脚(输入引脚,输出引脚)
- PWM
lib.rs
:
该crate专为模糊测试设备驱动程序或完整应用程序而设计。它提供了如何模糊设备驱动程序/应用程序的最佳猜测。
入门
如果您不熟悉Rust中的模糊测试,则建议您阅读cargo-fuzz书籍。
安装cargo-fuzz
要安装cargo-fuzz,请运行
cargo install cargo-fuzz
在项目中初始化cargo fuzz
要将您的项目设置为使用cargo fuzz,请运行
cargo-fuzz init
这将在“fuzz”目录下添加一个名为targets的目标。
添加新的嵌入式模糊测试目标
要添加新的嵌入式模糊测试目标,请运行
cargo-fuzz add <my_target>
这将在“fuzz/fuzz_targets/my_target.rs”中添加一个新的二进制目标。默认情况下,您的目标将类似于以下内容;
#![no_main]
use libfuzzer_sys::fuzz_target;
fuzz_target!(|data: &[u8]| {
// fuzzed code goes here
});
要使用此库,只需将您需要的所有类型捆绑到一个模糊测试上下文对象中,例如:
use libfuzzer_sys::fuzz_target;
use embedded_hal_fuzz::digital::{ArbitraryInputPin, ArbitraryOutputPin};
use embedded_hal_fuzz::spi::ArbitrarySpiBus;
use embedded_hal::spi::SpiBus;
use embedded_hal::digital::{InputPin, OutputPin};
use arbitrary::Arbitrary;
#[derive(Debug, Arbitrary)]
struct Ctx {
input_pin: ArbitraryInputPin,
output_pin: ArbitraryOutputPin,
spi: ArbitrarySpiBus<u16>,
other_data: Vec<u8>,
}
fuzz_target!(|ctx: Ctx| {
let Ctx {input_pin, mut output_pin, mut spi, other_data } = ctx;
let _ = output_pin.set_high();
});
这些被模糊测试的外设将返回任意结果,包括Ok/Err类型。由于这些输入由模糊测试数据驱动,因此这些类型非常适合模糊测试您的驱动程序。
依赖项
~0.4–0.9MB
~19K SLoC