aflpp

Configure and run multi-core AFL++ fuzzing campaigns for C/C++ projects.

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

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? Setting up and running effective fuzzing campaigns with AFL++ involves many decisions—installation method, compilation mode, harness design, corpus management, and multi-core orchestration—and misconfiguration leads to slow fuzzing or missed bugs. ## Core Features & Use Cases - Installation & Setup Guidance: Covers Ubuntu/Debian packages, Docker (Hub or source), and source builds, plus a wrapper script for host/Docker execution. - Harness & Compilation Workflows: Explains libFuzzer-style harnesses, LTO/LLVM/GCC compilation modes, and sanitizer integration (ASan, UBSan). - Campaign Management: Details corpus creation and minimization, multi-core fuzzing with primary/secondary instances, CMPLOG, coverage analysis, and troubleshooting. - Use Case: You need to fuzz a C++ parsing library across 16 cores. Use this Skill to compile the target with afl-clang-fast++, set up a seed corpus, launch one primary and multiple secondary fuzzer instances, and monitor results with afl-whatsup. ## Quick Start Use the aflpp skill to compile my harness.cc and main.cc with AFL++ and start a multi-core fuzzing campaign with a minimal seed corpus.

Frequently Asked Questions about aflpp

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

FAQPage Schema
How do I fuzz a C++ project with AFL++?▼

Write a libFuzzer-style LLVMFuzzerTestOneInput harness, compile with afl-clang-fast++ using -fsanitize=fuzzer, create a seed corpus with at least one non-empty input, then run afl-fuzz with -i seeds and -o out directories.

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

AFL++ is best for multi-core fuzzing, diverse mutation strategies, and mature production codebases. libFuzzer suits quick setup and single-threaded fuzzing with simple harnesses, while LibAFL targets custom research-grade fuzzers.

How do I run AFL++ fuzzing on multiple cores?▼

Start one primary instance with afl-fuzz -M primary and secondary instances with -S secondary01, -S secondary02, sharing the same -i seeds and -o state directories. Monitor all jobs with afl-whatsup.

Does AFL++ work with AddressSanitizer?▼

Yes, compile with AFL_USE_ASAN=1 to enable AddressSanitizer. Note that the -m memory limit flag is unsupported with ASan due to its 20TB virtual memory reservation, and a common setup uses one ASan job among several non-ASan jobs.

Why is my AFL++ fuzzing speed so low?▼

Low exec/sec (under 1k) usually means you are not using persistent mode. Create an LLVMFuzzerTestOneInput-style harness instead of stdin fuzzing, and set AFL_TMPDIR=/dev/shm to avoid disk I/O bottlenecks.

When should I not use AFL++?▼

Avoid AFL++ for quick single-threaded prototyping where libFuzzer is simpler, or when you need fully custom mutators where LibAFL fits better. Also do not fuzz on production systems since afl-system-config disables OS security features.