libafl

Build custom fuzzers and run fuzzing campaigns using the LibAFL Rust library.

Updated Apr 5, 2026
One-click install
npx skills add https://github.com/marumo333/atrox --skill libafl-marumo333
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: libafl
Source: https://github.com/marumo333/atrox/tree/main/.claude/skills/trailofbits/plugins/testing-handbook-skills/skills/libafl
Command: npx skills add https://github.com/marumo333/atrox --skill libafl-marumo333

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, leaving advanced fuzzing needs unmet. ## Core Features & Use Cases - libFuzzer Drop-in Replacement: Run existing libFuzzer harnesses with LibAFL's compatibility runtime for multi-core campaigns. - Custom Fuzzer Construction: Assemble modular components (observers, feedback, mutators, schedulers, executors) in Rust to build fully customized fuzzers. - Advanced Techniques: Crash deduplication via backtrace observers, dictionary and auto-token fuzzing, and multi-core campaign management. - Use Case: Fuzz libpng by compiling it with the LibAFL compiler wrapper, linking an OSS-Fuzz harness, and launching a multi-core campaign with a PNG dictionary to discover crashes. ## Quick Start Use the libafl skill to set up a LibAFL fuzzing campaign for my C++ parsing library with a seed corpus and dictionary.

Frequently Asked Questions about libafl

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

FAQPage Schema
How do I use LibAFL as a libFuzzer replacement?▼

Build LibAFL's libFuzzer compatibility runtime with build.sh to produce libFuzzer.a, then compile your existing harness with clang++ using -fsanitize=fuzzer-no-link and link against libFuzzer.a. Run the binary with a corpus directory as usual.

LibAFL vs AFL++ vs libFuzzer: which fuzzer should I choose?▼

libFuzzer suits quick single-threaded setups, AFL++ handles multi-core general-purpose fuzzing, and LibAFL fits custom fuzzer development, novel techniques, and research. Choose LibAFL when standard fuzzers lack needed mutation strategies or architecture support.

What LLVM version does LibAFL require?▼

LibAFL requires Clang/LLVM versions 15 through 18. Install a compatible version via apt.llvm.org and set RUSTFLAGS, CC, and CXX environment variables to point to the correct clang binaries.

How do I deduplicate crashes in LibAFL fuzzing?▼

Add a BacktraceObserver to the executor and combine CrashFeedback with NewHashFeedback in the objective using feedback_and. This stores only crashes with unique backtraces, avoiding duplicate reports from the same bug.

Why is my LibAFL fuzzer not finding new coverage?▼

Missing coverage usually means instrumentation failed or the corpus lacks interesting seeds. Verify the compiler wrapper applied -fsanitize-coverage flags and provide seed inputs that exercise meaningful code paths.

When should I not use LibAFL?▼

Avoid LibAFL for simple fuzzing tasks where libFuzzer's quick setup or AFL++'s multi-core support suffices. Its high complexity and Rust development overhead only pay off for custom fuzzers or research needs.