afl-fuzz(8)

πŸŽ€ afl-fuzz(8) πŸŽ€

okay bestie, this one is from the System Manager's Manual and it is a lot β€” but we are getting through every single flag together, no cap. πŸ’…βœ¨


🌈 NAME 🌈

afl-fuzz β€” that is literally the name. Iconic. Periodt. πŸ’–


πŸ¦‹ SYNOPSIS πŸ¦‹

(the original does not list synopsis lines here β€” it just rolls straight into OPTIONS, so we do too) 🫢


✨ OPTIONS ✨

🧸 Required parameters:

  • -i dir β€” input directory full of test cases. You can also pass '-' to resume, and bestie, also see AFL_AUTORESUME. πŸŽ€
  • -o dir β€” output directory where the fuzzer puts its findings. Slay. πŸ’…

πŸ”₯ Execution control settings:

  • -P strategy β€” sets the fix mutation strategy: explore (focus on new coverage) or exploit (focus on triggering crashes). You can also set a number of seconds after without any finds it switches to exploit mode, and back on new coverage (default: 1000). ⭐
  • -p schedule β€” power schedules compute a seed's performance score: explore (default), fast, exploit, seek, rare, mmopt, coe, lin quad β€” see docs/FAQ.md for more information. πŸ¦‹
  • -f file β€” location read by the fuzzed program (default: stdin or @@). πŸŽ€
  • -t msec β€” timeout for each run (auto-scaled, default 1000 ms). Add a '+' to auto-calculate the timeout, the value being the maximum. ⏳
  • -m megs β€” memory limit for child process (0 MB, 0 = no limit [default]). 🧚
  • -O β€” use binary-only instrumentation (FRIDA mode). πŸ”₯
  • -Q β€” use binary-only instrumentation (QEMU mode). πŸ’œ
  • -U β€” use unicorn-based instrumentation (Unicorn mode). πŸ¦„
  • -W β€” use qemu-based instrumentation with Wine (Wine mode). 🍷
  • -X β€” use VM fuzzing (NYX mode - standalone mode). πŸ‘‘
  • -Y β€” use VM fuzzing (NYX mode - multiple instances mode). 🌈
  • -K dir β€” use python script to interact with GUI (GUI mode). 🫢

πŸ§ͺ Mutator settings:

  • -a type β€” target input format, "text" or "binary" (default: generic). πŸ’–
  • -g minlength β€” set min length of generated fuzz input (default: 1). πŸ“
  • -G maxlength β€” set max length of generated fuzz input (default: 1048576). 🌸
  • -L minutes β€” use MOpt(imize) mode and set the time limit for entering the pacemaker mode (minutes of no new finds). 0 = immediately, -1 = immediately and together with normal mutation.
Note: this option is usually not very effective. 😭
  • -u β€” enable testcase splicing. βœ‚οΈβœ¨
  • -c program β€” enable CmpLog by specifying a binary compiled for it. If using QEMU/FRIDA or the fuzzing target is compiled for CmpLog then use '-c 0'. To disable CMPLOG use '-c -'. 🧠
  • -l cmplog_opts β€” CmpLog configuration values (e.g. "2ATR"):
    • 1 = small files
    • 2 = larger files (default)
    • 3 = all files
    • A = arithmetic solving
    • T = transformational solving
    • X = extreme transform solving
    • R = random colorization bytes
    • M = tightness scheduling (favour barely-passed cmps)
    • Z = size-derive mining (compile target with AFL_LLVM_BUG_ALLOCSIZE_DERIVE). πŸ’…

πŸ¦‹ Fuzzing behavior settings:

  • -Z β€” sequential queue selection instead of weighted random. 🎯
  • -N β€” do not unlink the fuzzing input file (for devices etc.). πŸ™ˆ
  • -n β€” fuzz without instrumentation (non-instrumented mode). 🫢
  • -x dict_file β€” fuzzer dictionary (see README.md, specify up to 4 times). πŸ“š
  • -w san_binary β€” specify the extra sanitizer instrumented binaries, can be specified multiple times. Read docs/SAND.md for details. 🧼

🧸 Test settings:

  • -s seed β€” use a fixed seed for the RNG. 🌱
  • -V seconds β€” fuzz for a specified time then terminate (fuzz time only!). ⏰
  • -E execs β€” fuzz for an approx. no. of total executions then terminate.
Note: not precise and can have several more executions. πŸ’€

πŸ‘‘ Other stuff:

  • -M/-S id β€” distributed mode (-M sets -Z and disables trimming). See docs/fuzzing_in_depth.md#c-using-multiple-cores for effective recommendations for parallel fuzzing. 🌈
  • -F path β€” sync to a foreign fuzzer queue directory (requires -M, can be specified up to 32 times). πŸ”—
  • -z β€” skip the enhanced deterministic fuzzing (note that the old -d and -D flags are ignored.). 🚫
  • -T text β€” text banner to show on the screen. πŸŽ€
  • -I command β€” execute this command when a new crash is found, the crash file path is passed as argument. 🚨
  • -C β€” crash exploration mode (the peruvian rabbit thing). 🐰
  • -b cpu_id β€” bind the fuzzing process to the specified CPU core (0-...). πŸ“Œ
  • -e ext β€” file extension for the fuzz test input file (if needed). πŸ“Ž

okay so the environment variables used are literally the backstage pass crew for your fuzz session β€” set them and the whole run changes energy. Full roster, no skips, fr fr:

  • LD_BIND_LAZY β€” do not set the LD_BIND_NOW env var for the target.
  • ASAN_OPTIONS β€” custom settings for ASAN; it must contain abort_on_error=1 and symbolize=0.
  • MSAN_OPTIONS β€” custom settings for MSAN; it must contain exitcode=86 and symbolize=0.
  • AFL_ALLOW_CORES β€” allow creating core files of target crashes.
  • AFL_AUTORESUME β€” resume fuzzing if the directory specified by -o already exists.
  • AFL_BENCH_JUST_ONE β€” run the target just once.
  • AFL_BENCH_UNTIL_CRASH β€” exit soon when the first crashing input has been found.
  • AFL_CMPLOG_ONLY_NEW β€” do not run cmplog on initial testcases (good for resumes!).
  • AFL_CRASH_EXITCODE β€” optional child exit code to be interpreted as a crash.
  • AFL_CUSTOM_MUTATOR_LIBRARY β€” lib with afl_custom_fuzz() to mutate inputs.
  • AFL_CUSTOM_MUTATOR_ONLY β€” avoid AFL++’s internal mutators.
  • AFL_CYCLE_SCHEDULES β€” after completing a cycle, switch to a different -p schedule.
  • AFL_DEBUG β€” extra debugging output for Python mode trimming.
  • AFL_DEBUG_CHILD β€” do not suppress stdout/stderr from target.
  • AFL_DISABLE_REDUNDANT β€” disable any queue item that is redundant.
  • AFL_DISABLE_TRIM β€” disable the trimming of test cases.
  • AFL_DUMB_FORKSRV β€” use fork server without feedback from target.
  • AFL_EXIT_WHEN_DONE β€” exit when all inputs are run and no new finds are found.
  • AFL_EXIT_ON_TIME β€” exit when no new coverage is found within the specified time.
  • AFL_EXIT_ON_SEED_ISSUES β€” exit on any kind of seed issues.
  • AFL_EXPAND_HAVOC_NOW β€” immediately enable expand havoc mode (default: after 60 minutes and a cycle without finds).
  • AFL_FAST_CAL β€” limit the calibration stage to three cycles for speedup.
  • AFL_FORCE_UI β€” force showing the status screen (for virtual consoles).
  • AFL_FORKSRV_INIT_TMOUT β€” time spent waiting for forkserver during startup (in ms).
  • AFL_FRAMESHIFT_DISABLE β€” disable FRAMESHIFT algorithm.
  • AFL_HANG_TMOUT β€” override timeout value (in milliseconds).
  • AFL_I_DONT_CARE_ABOUT_MISSING_CRASHES β€” don’t warn about core dump handlers.
  • AFL_IGNORE_PROBLEMS β€” do not abort fuzzing if an incorrect setup is detected.
  • AFL_IGNORE_PROBLEMS_COVERAGE β€” if set in addition to AFL_IGNORE_PROBLEMS, also ignore those libs for coverage.
  • AFL_IGNORE_SEED_PROBLEMS β€” skip over crashes and timeouts in the seeds instead of exiting.
  • AFL_IGNORE_TIMEOUTS β€” do not process or save any timeouts.
  • AFL_IGNORE_UNKNOWN_ENVS β€” don’t warn on unknown env vars.
  • AFL_IMPORT_FIRST β€” sync and import test cases from other fuzzer instances first.
  • AFL_INPUT_LEN_MIN/AFL_INPUT_LEN_MAX β€” like -g/-G: set min/max fuzz length produced.
  • AFL_INPUT_PLACEHOLDER β€” custom placeholder string for input file arguments (default: @@); use this when @@ conflicts with your target program’s arguments.
  • AFL_PIZZA_MODE πŸ• β€” 1 enforces pizza mode, -1 disables it for April 1st, 0 (default) activates it on April 1st.
  • AFL_KILL_SIGNAL β€” Signal ID delivered to child processes on timeout, etc. (default: SIGKILL).
  • AFL_FORK_SERVER_KILL_SIGNAL β€” Kill signal for the fork server on termination (default: SIGTERM). If unset and AFL_KILL_SIGNAL is set, that value will be used.
  • AFL_MAP_SIZE β€” the shared memory size for that target. Must be >= the size the target was compiled for.
  • AFL_MAX_DET_EXTRAS β€” if more entries are in the dictionary list than this value, they are randomly selected instead of all of them being used. Defaults to 200.
  • AFL_NO_AFFINITY β€” do not check for an unused cpu core to use for fuzzing.
  • AFL_TRY_AFFINITY β€” try to bind to an unused core, but don’t fail if unsuccessful.
  • AFL_NO_ARITH β€” skip arithmetic mutations in deterministic stage.
  • AFL_NO_AUTODICT β€” do not load an offered auto dictionary compiled into a target.
  • AFL_NO_CPU_RED β€” avoid red color for showing very high cpu usage.
  • AFL_NO_FORKSRV β€” run target via execve instead of using the forkserver.
  • AFL_NO_SNAPSHOT β€” do not use the snapshot feature (if the snapshot lkm is loaded).
  • AFL_NO_STARTUP_CALIBRATION β€” no initial seed calibration, start fuzzing at once.
  • AFL_NO_WARN_INSTABILITY β€” don’t warn about instability issues on startup calibration.
  • AFL_NO_UI β€” switch status screen off.
  • AFL_NYX_AUX_SIZE β€” size of the Nyx auxiliary buffer. Must be a multiple of 4096. Increase this value in case the crash reports are truncated. Default value is 4096.
  • AFL_NYX_DISABLE_SNAPSHOT_MODE β€” disable snapshot mode (must be supported by the agent).
  • AFL_NYX_LOG β€” output NYX hprintf messages to another file.
  • AFL_NYX_REUSE_SNAPSHOT β€” reuse an existing Nyx root snapshot.
  • AFL_OLD_CHILD_SYNC β€” use file descriptor persistent-mode synchronization instead of the default shared memory + futex path (Linux only).
  • AFL_PATH β€” path to AFL support binaries.
  • AFL_PYTHON_MODULE β€” mutate and trim inputs with the specified Python module.
  • AFL_QUIET β€” suppress forkserver status messages.
  • AFL_POST_PROCESS_KEEP_ORIGINAL β€” save the file as it was prior post-processing to the queue, but execute the post-processed one.
  • AFL_PRELOAD β€” LD_PRELOAD / DYLD_INSERT_LIBRARIES settings for target.
  • AFL_TARGET_ENV β€” pass extra environment variables to target.
  • AFL_SHUFFLE_QUEUE β€” reorder the input queue randomly on startup.
  • AFL_SKIP_BIN_CHECK β€” skip afl compatibility checks, also disables auto map size.
  • AFL_SKIP_CPUFREQ β€” do not warn about variable cpu clocking.
  • AFL_STATSD β€” enables StatsD metrics collection.
  • AFL_STATSD_HOST β€” change default statsd host (default 127.0.0.1).
  • AFL_STATSD_PORT β€” change default statsd port (default: 8125).
  • AFL_STATSD_TAGS_FLAVOR β€” set statsd tags format (default: disable tags). Supported formats: dogstatsd, librato, signalfx, influxdb.
  • AFL_FORCE_FASTRESUME β€” force loading a fast resume file even if the target changed.
  • AFL_NO_FASTRESUME β€” do not read or write a fast resume file.
  • AFL_NO_SYNC β€” disables all syncing.
  • AFL_SYNC_TIME β€” sync time between fuzzing instances (in minutes).
  • AFL_FINAL_SYNC β€” sync a final time when exiting (will delay the exit!).
  • AFL_NO_CRASH_README β€” do not create a README in the crashes directory.
  • AFL_TESTCACHE_SIZE β€” use a cache for testcases, improves performance (in MB).
  • AFL_TMPDIR β€” directory to use for input file generation (ramdisk recommended).
  • AFL_EARLY_FORKSERVER β€” force an early forkserver in an afl-clang-fast/afl-clang-lto/afl-gcc-fast target.
  • AFL_PERSISTENT β€” enforce persistent mode (if __AFL_LOOP is in a shared lib).
  • AFL_DEFER_FORKSRV β€” enforced deferred forkserver (__AFL_INIT is in a shared lib).
  • AFL_FUZZER_STATS_UPDATE_INTERVAL β€” interval to update fuzzer_stats file in seconds (default: 60, minimum: 1).

Build tea β˜•: this copy is compiled with Python 3.14.5 module support, see docs/custom_mutators.md. It’s compiled without AFL_PERSISTENT_RECORD support. It’s compiled with shmat support. For additional help please consult docs/README.md :)


🫢 AUTHOR 🫢

AFL++ was written by Michal "lcamtuf" Zalewski and is maintained by Marc "van Hauser" Heuse <mh@mh-sec.de>, Dominik Maier <domenukk@gmail.com>, Andrea Fioraldi <andreafioraldi@gmail.com> and Heiko "hexcoder-" Eissfeldt <heiko.eissfeldt@hexco.de>. The homepage of AFL++ is: https://github.com/AFLplusplus/AFLplusplus

πŸ‘‘ LICENSE πŸ‘‘

AFL++ is licensed under AGPL-3.0-or-later, with original components under Apache-2.0; an optional commercial license is available. See https://github.com/AFLplusplus/AFLplusplus/blob/stable/LICENSING.md

Signed with love: AFL++, dated 2026-06-05, section afl-fuzz(8) πŸ’…βœ¨

πŸ“¦ where this page comes from