aflpp

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

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

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? Setting up coverage-guided fuzzing with AFL++ involves many decisions—installation method, compilation mode, harness design, corpus management, and multi-core orchestration—and mistakes lead to slow campaigns or missed bugs. This Skill provides the complete operational playbook for running effective AFL++ fuzzing campaigns. ## Core Features & Use Cases - Installation & Compilation Guidance: Covers Ubuntu/Debian packages, Docker, and source builds, plus choosing between LTO, LLVM, and GCC plugin compilation modes. - Harness & Campaign Management: Explains libFuzzer-style harness rules, seed corpus creation, corpus minimization with afl-cmin, and interpreting fuzzer statistics. - Multi-Core & Sanitizer Integration: Details primary/secondary fuzzer orchestration, ASan/UBSan builds, CMPLOG constraint solving, and key environment variables like AFL_TMPDIR and AFL_FAST_CAL. - Use Case: You need to fuzz a C++ parsing library across 16 cores. Use this Skill to build an instrumented binary with afl-clang-fast++, launch one primary and multiple secondary fuzzers, and minimize the resulting crash corpus. ## Quick Start Ask the agent to compile your harness with afl-clang-fast++ and start an AFL++ 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 an LLVMFuzzerTestOneInput harness that passes fuzzer data to your target function, compile it with afl-clang-fast++ using -fsanitize=fuzzer, create a seed corpus with at least one non-empty file, then run afl-fuzz with -i seeds and -o out directories.

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

AFL++ is better for multi-core fuzzing campaigns, diverse mutation strategies, and large production codebases that benefit from parallel execution. libFuzzer suits quick setup and single-threaded fuzzing with simple harnesses.

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

Start one primary instance with afl-fuzz -M primary and additional secondary instances with -S flags, all sharing the same output directory. AFL++ scales roughly linearly with physical cores and supports asymmetrical setups like one ASan job among non-sanitized jobs.

Does AFL++ work with AddressSanitizer?

Yes, compile with AFL_USE_ASAN=1 to enable AddressSanitizer instrumentation. Note that the -m memory limit flag is incompatible with ASan because it reserves 20TB of virtual memory, and ASan jobs run slower so use only one per multi-core campaign.

Why is my AFL++ fuzzing speed so low?

Low executions per second usually means you are not using persistent mode with an LLVMFuzzerTestOneInput harness. Also set AFL_TMPDIR=/dev/shm to avoid disk I/O bottlenecks and run afl-system-config after each reboot for up to 15% more executions.

When should I not use AFL++?

Avoid AFL++ when you need quick single-threaded prototyping, where libFuzzer is simpler, or when you need custom mutators and research-grade features, where LibAFL fits better. Also do not fuzz on production systems since system configuration scripts disable OS security features.