afl-cmin.bash(8)

πŸ’… afl-cmin.bash(8) β€” like, the group chat version

okay so real quick: this is a page from the System Manager's Manual, and it's about afl-cmin.bash β€” the corpus minimizer bestie. she takes your giant messy pile of seed files and slims it down to only the ones that actually do something. honestly iconic behavior. πŸŽ€


✨ NAME ✨

afl-cmin.bash β€” bestie, that's literally the whole name, no extra lore πŸ’–


πŸ¦‹ SYNOPSIS πŸ¦‹

Usage: ./afl-cmin.bash [ options ] -- /path/to/target_app [ ... ]

so you run the script, you throw your options at it, then --, then the path to the target app, then whatever extra args the target wants. the -- is the vibe check divider between "my settings" and "the app's settings". periodt. ✨


🌸 OPTIONS 🌸

πŸ’œ Required parameters (yes, these are non-negotiable, no cap)

  • -i dir β€” the input directory holding your starting corpus. your big pile of seeds goes here. πŸ“
  • -o dir β€” the output directory where the minimized files get dropped. this is where the magic lands, bestie. ✨

πŸ”₯ Execution control settings (how she actually runs the thing)

  • -T tasks β€” how many parallel processes to create (default=1, "all"=nproc). more tasks = more girlies working at once. πŸ‘‘
  • -f file β€” the location read by the fuzzed program (default: stdin). lowkey important if your target doesn't just eat stdin. πŸ™ˆ
  • -m megs β€” memory limit for child process (default=none MB). be nice to your RAM, she's trying her best. πŸ’€
  • -t msec β€” run time limit for child process (default: 5000ms). five whole seconds by default, generous queen.
  • -O β€” use binary-only instrumentation (FRIDA mode). no source? no problem. 🧚
  • -Q β€” use binary-only instrumentation (QEMU mode). the classic binary-only road. 🌈
  • -U β€” use unicorn-based instrumentation (Unicorn mode). sparkly. ⭐
  • -X β€” use Nyx mode. the fancy one. πŸ‘‘

πŸŽ€ Minimization settings (the actual "make it smaller" section)

  • -A β€” allow crashing and timeout inputs. yes, the messy ones get to stay. πŸ’…
  • -C β€” keep crashing inputs, reject everything else. very picky, very main character energy. 😭
  • -e β€” solve for edge coverage only, ignore hit counts. vibes only, no numbers. ✨

🫢 the little notes at the bottom of that section 🫢

  • For additional tips, please consult README.md. fr fr, it's right there. πŸ“–
  • This script cannot read filenames that end with a space ' '. that's just how it is, ngl β€” rename the file or accept your fate. πŸ’€

🌟 Environment variables used (yes she reads the vibe of your shell) 🌟

  • AFL_KEEP_TRACES β€” leave the temporary <out_dir>.traces directory. it's giving "i'm not throwing that away". πŸŽ€
  • AFL_NO_FORKSRV β€” run target via execve instead of using the forkserver. old school. πŸ¦‹
  • AFL_PATH β€” last resort location to find the afl-showmap binary. she'll go looking, but only as a last resort. πŸ™ˆ
  • AFL_SKIP_BIN_CHECK β€” skip check for target binary. yeet the safety rail. πŸ”₯
  • AFL_CUSTOM_MUTATOR_LIBRARY β€” custom mutator library (post_process and send). 🧚
  • AFL_PYTHON_MODULE β€” custom mutator library (post_process and send). yes, same description, that's literally what the page says, don't come for me. πŸ’œ

πŸ‘‘ 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

like, a whole squad of maintainers. respect. 🫢


🌈 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


okay that's the whole page, you ate that. mwah. πŸ’–βœ¨

this masterpiece brought to you by AFL++, dated 2026-06-05 β€” afl-cmin.bash(8), signing off πŸŽ€πŸ¦‹πŸ’…
πŸ“¦ where this page comes from