This document lists important changes in AFL++, for example, major behavior changes.
With AFL++ 4.00, we introduced the following changes from previous behaviors:
- The complete documentation was overhauled and restructured thanks to @llzmb
- A new CMPLOG target format requires recompiling CMPLOG targets for use with AFL++ 4.0 onwards
- Better naming for several fields in the UI
With AFL++ 3.15, we introduced the following changes from previous behaviors:
- afl-cmin and afl-showmap
-Cinow descend into subdirectories likeafl-fuzz-idoes (but note thatafl-cmin.bashdoes not)
With AFL++ 3.14, we introduced the following changes from previous behaviors:
afl-fuzz: deterministic fuzzing is not a default for-M mainanymore- afl-cmin/afl-showmap
-inow descends into subdirectories (afl-cmin.bash, however, does not)
With AFL++ 3.10, we introduced the following changes from previous behaviors:
- The
+feature of the-toption now means to auto-calculate the timeout, with the value given being the maximum timeout. The original meaning of "skipping timeouts instead of abort" is now inherent to the-toption.
With AFL++ 3.00, we introduced changes that break some previous AFL and AFL++ behaviors and defaults:
- There are no
llvm_modeandgcc_pluginsubdirectories anymore and there is only one compiler:afl-cc. All previous compilers now symlink to this one. All instrumentation source code is now in theinstrumentation/folder. - The
gcc_pluginwas replaced with a new version submitted by AdaCore that supports more features. Thank you! - QEMU mode got upgraded to QEMU 5.1, but to be able to build this a current ninja build tool version and python3 setuptools are required. QEMU mode also got new options like snapshotting, instrumenting specific shared libraries, etc. Additionally QEMU 5.1 supports more CPU targets so this is really worth it.
- When instrumenting targets,
afl-ccwill not supersede optimizations anymore if any were given. This allows fuzzing targets built regularly, such as debug or release versions. - afl-fuzz:
- If neither
-Mnor-Sis specified,-Sdefault is assumed, so more fuzzers can easily be added later - The
-iinput directory option now descends into subdirectories. It also does not fail on crashes and too large files; instead, it skips them and uses them for splicing mutations -m noneis now the default; set memory limits (in MB) with, e.g.,-m 250- Deterministic fuzzing is now disabled by default (unless using
-M) and can be enabled with-D - A caching of test cases can now be performed and can be modified by editing
config.hforTESTCASE_CACHEor by specifying the environment variableAFL_TESTCACHE_SIZE(in MB). Good values are between 50–500 (default: 50). -Mmains do not perform trimming
- If neither
examples/got renamed toutils/libtokencap/,libdislocator/, andqdbi_mode/were moved toutils/- afl-cmin/afl-cmin.bash now search first in
PATHand last inAFL_PATH