
Sous-commande Cargo pour le fuzzing Rust guidé par la couverture avec libFuzzer : créer et exécuter des fuzz targets, minimiser les échecs et les corpus, et rapporter la couverture.
cargo fuzzUne sous-commande cargo pour le fuzzing avec libFuzzer ! Facile à utiliser !
$ cargo install cargo-fuzz
Note : libFuzzer nécessite la prise en charge des sanitizers LLVM, donc cela ne fonctionne que sur x86-64 et Aarch64,
et uniquement sur les systèmes d'exploitation de type Unix (pas Windows). Cela nécessite également un compilateur nightly car cela utilise des
flags de ligne de commande instables. Vous aurez aussi besoin d'un compilateur C++ avec le support du C++11.
cargo fuzz initInitialisez un projet cargo fuzz pour votre crate !
fuzz à workspace.members dans le Cargo.toml racineLe répertoire fuzz peut faire partie d'un workspace existant (par défaut)
ou utiliser un workspace indépendant. Si cette dernière option est souhaitée, vous pouvez utiliser
cargo fuzz init --fuzzing-workspace=true.
cargo fuzz add <target>Créez une nouvelle cible de fuzzing !
cargo fuzz run <target>Exécutez une cible de fuzzing et trouvez des bugs !
cargo fuzz fmt <target> <input>Affichez la sortie std::fmt::Debug pour un cas de test. Utile lorsque votre cible de fuzzing
prend une entrée Arbitrary !
cargo fuzz tmin <target> <input>Vous avez trouvé une entrée défaillante ? Réduisez-la à la plus petite entrée qui provoque cette défaillance pour un débogage plus facile !
cargo fuzz cmin <target>Réduisez votre corpus de fichiers d'entrée !
cargo fuzz coverage <target>Générez des informations de couverture sur le programme fuzzé !
La documentation se trouve dans le Rust Fuzz Book.
Vous pouvez également toujours trouver toutes les options de ligne de commande disponibles avec
--help :
$ cargo fuzz --help
Le tableau de chasse contient une liste de bugs
trouvés par cargo fuzz (et d'autres). cargo fuzz et libFuzzer ont-ils trouvé un bug
pour vous ? Ajoutez-le au tableau de chasse !
cargo-fuzz est distribué sous les termes de la licence MIT et de la
licence Apache (version 2.0).
Voir LICENSE-APACHE et LICENSE-MIT pour plus de détails.