Skip to content
STIMSMITH

AFL

Tool

AFL is described in the provided evidence as a state-of-the-art coverage-guided fuzzer. It appears as a representative coverage-guided fuzzing tool alongside libFuzzer, and a processor-verification study compared unmodified AFL 2.56b, called Vanilla AFL, with an Enhanced AFL variant using problem-specific mutations.

First seen 5/25/2026
Last seen 7/20/2026
Evidence 52 chunks
Wiki v3

WIKI

Overview

AFL is described in the evidence as a coverage-guided fuzzer and as a notable representative of coverage-guided fuzzing alongside LLVM-based libFuzzer. The cited ISS-verification paper characterizes mutation-based fuzzing as a technique that mutates randomly created data and is guided by code coverage, avoiding the need to create an input model. [AFL as coverage-guided fuzzer]

A later cross-level processor-verification study refers to AFL as a state-of-the-art coverage-guided fuzzer and uses the unmodified AFL 2.56b release as its baseline, calling it Vanilla AFL. [AFL 2.56b baseline]

READ FULL ARTICLE →

NEIGHBORHOOD

5 nodes · 7 edges
graph · AFL · depth=1

RELATIONSHIPS

49 connections
Coverage-Guided Fuzzing implements → 100% 6e
AFL implements coverage-guided fuzzing using branch coverage as feedback.
QEMU uses → 100% 5e
AFL uses QEMU for fuzzing non-native ISA targets.
Edge Coverage uses → 100% 4e
AFL tracks edge coverage by instrumenting conditional branches and measuring basic block transitions.
Fast Exploration Mutation ← extends 90% 4e
Fast Exploration Mutation is a custom mutation designed to enhance AFL's fuzzing performance for processor verification.
The paper uses AFL as the base coverage-guided fuzzer, extended with custom mutations.
Coverage-guided Fuzzing implements → 100% 3e
AFL is a coverage-guided grey box fuzzer.
TaPaFuzz compares with → 100% 3e
TaPaFuzz is compared against AFL++ in terms of execution rate and coverage.
Michal Zalewski authored by → 100% 3e
AFL was originally developed by Michal Zalewski.
The paper mentions AFL as the original fuzzer from which AFL++ and LibAFL derive.
Compiler Instrumentation uses → 100% 2e
AFL uses LLVM and GCC for compiler-based target instrumentation.
Forkserver uses → 100% 2e
AFL uses fork system calls to optimize re-spawning processes for fuzzer runs.
ISA Emulation uses → 100% 2e
AFL uses QEMU mode for ISA emulation to fuzz non-native ISA targets.
Persistent Mode uses → 100% 2e
AFL++ uses persistent mode to reduce fork system call overhead.
RFUZZ ← uses 100% 2e
RFuzz uses AFL as its underlying fuzzing engine with mux coverage as feedback.
Mutation-Based Fuzzing implements → 97% 2e
AFL implements mutation-based fuzzing with bit flips, arithmetic operations, and splicing.
coverage-guided mutation fuzzing ← uses 90% 2e
The CGM-Fuzz baseline is inspired by AFL++ style coverage-guided mutation fuzzing.
AFL White-Paper ← introduces 97% 2e
The AFL white-paper describes and introduces AFL as a coverage-guided fuzzer.
Coverage-based Greybox Fuzzing implements → 100% 2e
AFL implements the CGF algorithm with AssignEnergy and IsInteresting functions.
Bitflip Mutation uses → 100% 2e
AFL uses bitflip mutation to flip bits in the test input.
Arithmetic Mutation uses → 100% 2e
AFL uses arithmetic mutation to add/subtract integers in the test input.
Havoc Mutation uses → 100% 2e
AFL uses havoc mutation as a combination of multiple individual mutations.
Enhanced Havoc Mutation ← extends 90% 2e
Enhanced Havoc Mutation is a custom mutation designed to enhance AFL's fuzzing performance for processor verification.
Coverage-based Greybox Fuzzing implements → 98% 2e
AFL is a widely-used coverage-based greybox fuzzer
Code Coverage uses → 98% 2e
AFL uses code coverage as its primary feedback metric
The paper uses AFL++ as a baseline for performance comparison.
AFL extends → 100% 2e
AFL++ is a community fork of AFL with a newer codebase and more features.
Coverage-guided Fuzzing uses → 100% 2e
AFL is the most iconic coverage-guided fuzzer that has inspired numerous fuzzing projects.
Source Code Instrumentation uses → 100% 2e
AFL uses source code instrumentation to trace coverage, incurring ~70% overhead.
Edge Encoding uses → 100% 2e
AFL uses a specific edge encoding algorithm (Algorithm 1) based on XOR of random basic block IDs.
Dynamic Binary Instrumentation uses → 100% 2e
AFL uses DBI techniques for binary-only programs when source code is unavailable.
SNAP ← uses 100% 2e
SNAP provides a clean interface for AFL-based fuzzers to adopt its hardware tracing.
The paper provides detailed analysis of AFL's tracing overhead as a motivating example.
Shared Memory Coverage Map uses → 100% 2e
AFL records coverage transitions in a shared memory array.
Energy Assignment uses → 95% 1e
AFL assigns energy to seeds to determine mutation count
Coverage-Guided Greybox Fuzzing implements → 100% 1e
AFL is one of the first tools to popularize coverage-guided greybox fuzzing.
Coverage Bitmap uses → 100% 1e
AFL stores coverage information in a coverage bitmap for efficient comparison across runs.
FuzzWiz ← uses 100% 1e
FuzzWiz uses AFL as one of its fuzzing engines.
afl-fuzz.c save_if_interesting ← part of 100% 1e
save_if_interesting in afl-fuzz.c is AFL's implementation of the IsInteresting function.
The paper mentions AFL as a fuzzing tool that uses QEMU mode and is relevant to emulator-based analysis.
afl-fuzz.c has_new_bits ← part of 100% 1e
has_new_bits in afl-fuzz.c is AFL's implementation of the IsInteresting function.
Hardware fuzzing implements → 80% 1e
AFL++ is a popular fuzzer example in software testing that can be applied to hardware fuzzing contexts
Grey-Box Fuzzing implements → 98% 1e
AFL is classified as a grey-box fuzzer.
Branch Coverage implements → 98% 1e
AFL uses branch coverage as its coverage metric injected when software is compiled.
FIFO Queue uses → 95% 1e
AFL uses a FIFO queue of interesting seeds for mutation.
Mutation-Based Fuzzing uses → 97% 1e
AFL uses mutation-based input generation strategies.
Coverage-Guided Mutation-Based Fuzzing implements → 100% 1e
AFL is a general-purpose coverage-guided mutation-based fuzzing engine.
feedback-guided fuzzing implements → 100% 1e
AFL uses instrumentation to obtain feedback for fuzzing.
Google authored by → 98% 1e
AFL was developed at Google.
Software Fuzzer (Host-Based) ← uses 96% 1e
The software fuzzer incorporates AFL++ as a sophisticated coverage-guided fuzzing engine.

CITATIONS

9 sources
9 citations — click to expand
[1] AFL is a representative coverage-guided fuzzer and mutation-based CGF mutates randomly created data guided by code coverage. Verifying Instruction Set Simulators using Coverage-guided Fuzzing
[2] The cross-level processor-verification study used unmodified AFL 2.56b as Vanilla AFL and compared it with Enhanced AFL. Efficient Cross-Level Processor Verification using Coverage-guided Fuzzing
[3] The study configured VexRiscv for RV32IM, used random seeds, used a 32-bit corpus value of 0x0000, and set a 24-hour runtime limit. Efficient Cross-Level Processor Verification using Coverage-guided Fuzzing
[4] The study defined #Queue as coverage-increasing non-mismatch test vectors and #Unique-Crash as unique mismatch-causing test vectors. Efficient Cross-Level Processor Verification using Coverage-guided Fuzzing
[5] Enhanced AFL used problem-specific mutations named Fast Exploration and Enhanced Havoc; Fast Exploration inserts each RISC-V instruction at the beginning of test vectors with x0 and immediate 0 arguments. Efficient Cross-Level Processor Verification using Coverage-guided Fuzzing
[6] The execution controller prevents infinite loops, detects processor-core mismatches, and applies a hard limit of 10,000 ISS instruction executions. Efficient Cross-Level Processor Verification using Coverage-guided Fuzzing
[7] The execution controller synchronizes comparisons on register-value changes and can stop simulation after detecting an ISS/RTL mismatch. Efficient Cross-Level Processor Verification using Coverage-guided Fuzzing
[8] Enhanced AFL generated fewer queue test vectors on average, but the Mann–Whitney U result for #Queue was not statistically significant at the stated 95% threshold. Efficient Cross-Level Processor Verification using Coverage-guided Fuzzing
[9] AFL++ is described as afl with community patches and additional features including QEMU 5.1 upgrade, collision-free coverage, enhanced laf-intel and redqueen, AFLfast++ power schedules, MOpt mutators, and unicorn_mode. AFLplusplus/AFLplusplus