libafl

Build custom Rust-based fuzzers using LibAFL's modular fuzzing library components.

Updated Mar 22, 2026
One-click install
npx skills add https://github.com/TECH-HY/SKILLS --skill libafl-tech-hy
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: libafl
Source: https://github.com/TECH-HY/SKILLS/tree/main/skills/libafl
Command: npx skills add https://github.com/TECH-HY/SKILLS --skill libafl-tech-hy

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? Standard fuzzers like libFuzzer and AFL++ lack support for custom mutation strategies, non-standard target architectures, and novel fuzzing research techniques. This Skill guides you through building fully customized fuzzers with LibAFL's modular Rust components. ## Core Features & Use Cases - libFuzzer Drop-in Replacement: Reuse existing libFuzzer harnesses with LibAFL's compatibility runtime for improved multi-core fuzzing. - Custom Fuzzer Construction: Assemble observers, feedback, objectives, mutators, schedulers, and executors into a tailored fuzzer as a Rust library. - Advanced Techniques: Configure crash deduplication via backtrace hashing, dictionary and auto-token fuzzing, multi-core campaigns, and compiler wrappers for automatic instrumentation. - Use Case: Fuzz libpng by building it with the LibAFL compiler wrapper, linking the OSS-Fuzz harness, seeding with a PNG corpus and dictionary, then launching a multi-core campaign. ## Quick Start Ask the AI to set up a LibAFL fuzzer for your C/C++ target, including the compiler wrapper, harness, seed corpus, and a multi-core fuzzing command.

Frequently Asked Questions about libafl

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I build a custom fuzzer with LibAFL?

Create a Rust library project with libafl, libafl_targets, libafl_bolts, and libafl_cc dependencies, then assemble observers, feedback, objectives, a mutator, scheduler, and executor around your harness. Launch it with the Launcher builder across selected cores.

LibAFL vs libFuzzer vs AFL++: which fuzzer should I use?

libFuzzer suits quick single-threaded setups, AFL++ fits general multi-core fuzzing, and LibAFL is best when you need custom mutation strategies, fine-grained component control, or fuzzing research capabilities.

Can LibAFL run existing libFuzzer harnesses?

Yes, LibAFL provides a libFuzzer compatibility runtime built from the libafl_libfuzzer_runtime directory. Compile your existing LLVMFuzzerTestOneInput harness against the produced libFuzzer.a and run it as a drop-in replacement.

What LLVM version does LibAFL require?

LibAFL requires Clang/LLVM versions 15 through 18. Set RUSTFLAGS, CC, and CXX to point at the matching clang binaries, and install nightly Rust with llvm-tools for libFuzzer compatibility mode.

Why does my LibAFL fuzzer show no coverage increase?

Missing coverage usually means instrumentation failed during compilation. Verify the LibAFL compiler wrapper was used and that -fsanitize-coverage=trace-pc-guard flags were applied when building the target.

How do I avoid duplicate crashes in LibAFL?

Add a BacktraceObserver to the executor and combine CrashFeedback with NewHashFeedback in the objective. This stores only crashes with unique backtraces, deduplicating repeated findings from the same bug.