
Subcomando de Cargo para fuzzing de Rust guiado por cobertura con libFuzzer: crear y ejecutar objetivos de fuzz, minimizar fallos y corpus, y reportar cobertura.
cargo fuzz¡Un subcomando de cargo para hacer fuzzing con libFuzzer! ¡Fácil de usar!
$ cargo install cargo-fuzz
Nota: libFuzzer necesita soporte de sanitizers de LLVM, por lo que esto solo funciona en x86-64 y Aarch64, y solo en sistemas operativos tipo Unix (no Windows). También necesita un compilador nightly, ya que utiliza algunas banderas de línea de comandos inestables. También necesitarás un compilador de C++ con soporte para C++11.
cargo fuzz init¡Inicializa un proyecto cargo fuzz para tu crate!
fuzz a workspace.members en el Cargo.toml de la raízEl directorio fuzz puede ser parte de un workspace existente (por defecto) o usar un workspace independiente. Si se prefiere esto último, puedes usar cargo fuzz init --fuzzing-workspace=true.
cargo fuzz add <target>¡Crea un nuevo objetivo de fuzzing!
cargo fuzz run <target>¡Ejecuta un objetivo de fuzzing y encuentra errores!
cargo fuzz fmt <target> <input>Imprime la salida de std::fmt::Debug para un caso de prueba. ¡Útil cuando tu objetivo de fuzzing toma una entrada Arbitrary!
cargo fuzz tmin <target> <input>¿Encontraste una entrada que falla? ¡Minimízala a la entrada más pequeña que causa ese fallo para facilitar la depuración!
cargo fuzz cmin <target>¡Minimiza tu corpus de archivos de entrada!
cargo fuzz coverage <target>¡Genera información de cobertura del programa sometido a fuzzing!
La documentación se puede encontrar en el Rust Fuzz Book.
También puedes encontrar siempre todas las opciones de línea de comandos disponibles con --help:
$ cargo fuzz --help
La vitrina de trofeos tiene una lista de errores encontrados por cargo fuzz (y otros). ¿cargo fuzz y libFuzzer encontraron un error para ti? ¡Añádelo a la vitrina de trofeos!
cargo-fuzz se distribuye bajo los términos de la licencia MIT y la Licencia Apache (Versión 2.0).
Consulta LICENSE-APACHE y LICENSE-MIT para más detalles.