
libFuzzer를 이용한 커버리지 기반 Rust 퍼징용 Cargo 서브커맨드: 퍼즈 타겟을 생성·실행하고, 실패 사례와 코퍼스를 최소화하며, 커버리지를 보고합니다.
cargo fuzzlibFuzzer로 퍼징을 수행하는 cargo 서브커맨드! 사용하기 쉽습니다!
$ cargo install cargo-fuzz
참고: libFuzzer는 LLVM sanitizer 지원이 필요하므로 x86-64 및 Aarch64에서만,
그리고 Unix 계열 운영 체제(Windows 제외)에서만 동작합니다. 일부 unstable 커맨드라인 플래그를 사용하므로 nightly 컴파일러도 필요합니다.
C++11을 지원하는 C++ 컴파일러도 필요합니다.
cargo fuzz init여러분의 crate에 cargo fuzz 프로젝트를 초기화합니다!
Cargo.toml의 workspace.members에 fuzz 디렉터리를 추가하세요fuzz 디렉터리는 기존 워크스페이스의 일부(기본값)이거나
독립적인 워크스페이스를 사용할 수 있습니다. 후자를 원한다면
cargo fuzz init --fuzzing-workspace=true를 사용할 수 있습니다.
cargo fuzz add <target>새로운 퍼징 타깃을 생성합니다!
cargo fuzz run <target>퍼징 타깃을 실행하고 버그를 찾아냅니다!
cargo fuzz fmt <target> <input>테스트 케이스에 대한 std::fmt::Debug 출력을 보여줍니다. 퍼징 타깃이
Arbitrary 입력을 받을 때 유용합니다!
cargo fuzz tmin <target> <input>실패하는 입력을 찾으셨나요? 디버깅을 더 쉽게 하기 위해 해당 실패를 유발하는 가장 작은 입력으로 축소하세요!
cargo fuzz cmin <target>입력 파일 코퍼스를 축소하세요!
cargo fuzz coverage <target>퍼징된 프로그램에 대한 커버리지 정보를 생성합니다!
문서는 Rust Fuzz Book에서 찾을 수 있습니다.
또한 --help로 사용할 수 있는 전체 커맨드라인 옵션을
항상 확인할 수 있습니다:
$ cargo fuzz --help
트로피 케이스에는 cargo fuzz(및
다른 도구)가 발견한 버그 목록이 있습니다. cargo fuzz와 libFuzzer가 버그를
찾아냈나요? 트로피 케이스에 추가하세요!
cargo-fuzz는 MIT 라이선스와 Apache License(버전 2.0)의
조건에 따라 배포됩니다.
자세한 내용은 LICENSE-APACHE 및 LICENSE-MIT를 참조하세요.