afl-showmap(8)

πŸ’… afl-showmap(8) β€” System Manager's Manual πŸŽ€

okay so bestie, welcome to afl-showmap from the AFL++ family β€” this is the little tool that shows you the raw tuple data your target's AFL instrumentation captured. think of it as a vibe check for your coverage map πŸ’–


✨ NAME ✨

afl-showmap β€” the icon of showing you what edges your program actually hit, no cap πŸ‘‘


🌸 SYNOPSIS 🌸

afl-showmap [ options ] -- /path/to/target_app [ ... ]

yep that's the whole shape of it: your options first, then --, then the target and whatever args you wanna feed it 🫢


πŸ’… OPTIONS πŸ’…

πŸŽ€ Required parameters πŸŽ€

  • -o file β€” the file where the trace data gets written. lowkey required β€” except when you're using -S, then it's not needed at all.

πŸ”₯ Execution control settings πŸ”₯

  • -t msec β€” timeout for each run, in milliseconds (default: 1000ms)
  • -m megs β€” memory limit for the child process (default: none)
  • -O β€” use binary-only instrumentation, aka FRIDA mode
  • -Q β€” use binary-only instrumentation, aka QEMU mode
  • -U β€” use Unicorn-based instrumentation, aka Unicorn mode
  • -W β€” use qemu-based instrumentation with Wine, aka Wine mode (not necessary, it's here for consistency with the other afl-* tools β€” cute of them honestly)
  • -X β€” use Nyx mode 🌈

⭐ Other settings ⭐

  • -f file β€” the input file read by the tested program
  • -S β€” streaming mode: reads test cases from stdin and writes coverage to stdout using a length-value protocol. this is the slay part that lets you use afl-showmap as a coverage proxy so you can leverage the AFL++ forkserver without implementing it yourself, iykyk πŸ’«

Protocol β€” input side:

[u32 len][data]

Protocol β€” output side:

[u16 status][u32 edges][(u32,u8)*]
[u32 stdout_len][stdout_data*]
[u32 stderr_len][stderr_data*]

Status bits explained:

bits [0:1]  = exit (0=ok, 1=timeout, 2=crash)
bits [2:7]  = reserved (0)
bits [8:15] = exit code (ok) or signal (crash)
heads up bestie 🫢 stdout_len/stderr_len are currently always 0 β€” output capture is not yet implemented. don't come for me, it's on the way πŸ’€
  • -i dir β€” process all files below this directory. must be combined with -o. with -C, -o is a file; without -C it must be a directory, and each bitmap gets written there individually πŸŽ€
  • -I filelist β€” instead of -i, you hand it a list of files
  • -C β€” collect coverage, writes all edges to -o and gives you a summary. must be combined with -i.
  • -q β€” sink the program's output and don't show messages (silence is golden ✨)
  • -e β€” show edge coverage only, ignore hit counts
  • -r β€” show real tuple values instead of AFL filter values
  • -s β€” do not classify the map
  • -c β€” allow core dumps

πŸ¦‹ the whole point πŸ¦‹

this tool displays the raw tuple data captured by AFL instrumentation. for additional help, consult docs/README.md 🧚

if you're using -i/-I mode, then custom mutator post_process send/send functionality is supported. literally built for the group chat πŸ’Œ


🌈 Environment variables used 🌈

  • LD_BIND_LAZY β€” do not set the LD_BIND_NOW env var for the target
  • AFL_CMIN_CRASHES_ONLY β€” (cmin_mode) only write tuples for crashing inputs
  • AFL_CMIN_ALLOW_ANY β€” (cmin_mode) write tuples for crashing and timeout inputs too
  • AFL_CRASH_EXITCODE β€” optional child exit code to be interpreted as a crash
  • AFL_DEBUG β€” enable extra developer output πŸ‘©β€πŸ’»
  • AFL_FORKSRV_INIT_TMOUT β€” time spent waiting for the forkserver during startup (in milliseconds)
  • 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_PRELOAD β€” LD_PRELOAD / DYLD_INSERT_LIBRARIES settings for the target
  • AFL_INPUT_PLACEHOLDER β€” custom placeholder for the input file (default: @@)
  • AFL_PRINT_FILENAMES β€” print the queue entry currently processed to stdout
  • AFL_QUIET β€” do not print extra informational output 🀫
  • AFL_NO_FORKSRV β€” run the target via execve instead of using the forkserver

πŸ‘‘ 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 β€” go follow the icons πŸ’–


πŸ“œ 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 🫢


and that's the whole page, bestie ✨ β€” this edition of <pink>AFL++</pink> dropped on 2026-06-05 and honestly?? ate. no notes. bye babes πŸ’…πŸŽ€πŸ¦‹

πŸ“¦ where this page comes from