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 8/25/2026
Evidence 96 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

No graph connections found for this entity yet. It may appear in future ingestion runs.

explore full graph →

RELATIONSHIPS

50 connections
Coverage-Guided Fuzzing implements → 100% 8e
AFL++ implements coverage-guided fuzzing to discover new code paths.
The paper uses AFL as the baseline coverage-guided fuzzer and extends it with custom mutations.
SearchSYS ← uses 100% 6e
SearchSYS uses AFL++ as its fuzzing engine.
QEMU uses → 100% 5e
AFL uses QEMU for fuzzing non-native ISA targets.
Fast Exploration Mutation ← extends 90% 5e
Fast Exploration Mutation is a custom extension to AFL's mutation procedures for processor verification.
Edge Coverage uses → 100% 5e
AFL detects new behaviors through edge coverage.
Michal Zalewski authored by → 100% 3e
AFL was originally developed by Michal Zalewski.
Enhanced Havoc Mutation ← extends 90% 3e
Enhanced Havoc Mutation is a custom extension to AFL's havoc mutation for processor verification.
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.
Code Coverage uses → 100% 3e
AFL uses branch coverage as its primary guidance metric for fuzzing.
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.
RFUZZ ← uses 100% 2e
RFuzz uses AFL as its underlying fuzzing engine with mux coverage as feedback.
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.
Coverage-based Greybox Fuzzing implements → 98% 2e
AFL is a widely-used coverage-based greybox fuzzer
The paper uses AFL++ as a baseline for performance comparison.
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.
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.
Coverage-based Greybox Fuzzing implements → 100% 2e
AFL implements the CGF algorithm with AssignEnergy and IsInteresting functions.
Shared Memory Coverage Map uses → 100% 2e
AFL records coverage transitions in a shared memory array.
cm-gem5c.so uses → 100% 2e
cm-gem5c.so is loaded and used by AFL++ as a custom mutator.
Binary Instrumentation uses → 85% 2e
AFL++ uses binary instrumentation when building gem5 for fuzzing.
Experiment-ARM-24h.sh ← uses 100% 2e
Experiment-ARM-24h.sh uses AFL++ to run fuzzing campaigns.
HeteroFuzz compares with → 100% 2e
HeteroFuzz is compared to AFL-like naive fuzzing throughout the evaluation.
Fuzz Testing implements → 100% 2e
AFL is a well-known fuzz testing tool that implements coverage-guided fuzzing.
Coverage-Guided Fuzz Testing implements → 98% 2e
AFL++ is a coverage-guided fuzzer that provides the fuzzing core for SearchSYS.
RISC Whisk ← uses 100% 2e
RISC Whisk uses AFL++ as the software fuzzer for hardware binary fuzzing.
feedback-based fuzzing uses → 90% 2e
AFL++ implements feedback-based fuzzing by tracking coverage to guide mutations.
Coverage-Guided Greybox Fuzzing implements → 100% 1e
AFL is one of the first tools to popularize coverage-guided greybox fuzzing.
Hardware fuzzing ← uses 100% 1e
The hardware fuzzing approach in RISC Whisk uses AFL++ as the underlying fuzzer.
Custom Mutator uses → 100% 1e
The custom mutator is used by AFL++ as a plugin to replace its default mutation logic.
Coverage-Guided Fuzzing (CGF) implements → 100% 1e
AFL is a notable coverage-guided fuzzing tool
The paper mentions AFL as a fuzzing tool that uses QEMU mode and is relevant to emulator-based analysis.
Seed Input uses → 100% 1e
AFL starts fuzzing from seed inputs and mutates them to generate new test inputs.
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.
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.

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