1*08b48e0bSAndroid Build Coastguard Worker# Important changes in AFL++ 2*08b48e0bSAndroid Build Coastguard Worker 3*08b48e0bSAndroid Build Coastguard WorkerThis document lists important changes in AFL++, for example, major behavior 4*08b48e0bSAndroid Build Coastguard Workerchanges. 5*08b48e0bSAndroid Build Coastguard Worker 6*08b48e0bSAndroid Build Coastguard Worker## From version 3.00 onwards 7*08b48e0bSAndroid Build Coastguard Worker 8*08b48e0bSAndroid Build Coastguard WorkerWith AFL++ 4.00, we introduced the following changes from previous behaviors: 9*08b48e0bSAndroid Build Coastguard Worker * the complete documentation was overhauled and restructured thanks to @llzmb! 10*08b48e0bSAndroid Build Coastguard Worker * a new CMPLOG target format requires recompiling CMPLOG targets for use with 11*08b48e0bSAndroid Build Coastguard Worker AFL++ 4.0 onwards 12*08b48e0bSAndroid Build Coastguard Worker * better naming for several fields in the UI 13*08b48e0bSAndroid Build Coastguard Worker 14*08b48e0bSAndroid Build Coastguard WorkerWith AFL++ 3.15, we introduced the following changes from previous behaviors: 15*08b48e0bSAndroid Build Coastguard Worker * afl-cmin and afl-showmap `-Ci` now descend into subdirectories like afl-fuzz 16*08b48e0bSAndroid Build Coastguard Worker `-i` does (but note that afl-cmin.bash does not) 17*08b48e0bSAndroid Build Coastguard Worker 18*08b48e0bSAndroid Build Coastguard WorkerWith AFL++ 3.14, we introduced the following changes from previous behaviors: 19*08b48e0bSAndroid Build Coastguard Worker * afl-fuzz: deterministic fuzzing is not a default for `-M main` anymore 20*08b48e0bSAndroid Build Coastguard Worker * afl-cmin/afl-showmap -i now descends into subdirectories (afl-cmin.bash, 21*08b48e0bSAndroid Build Coastguard Worker however, does not) 22*08b48e0bSAndroid Build Coastguard Worker 23*08b48e0bSAndroid Build Coastguard WorkerWith AFL++ 3.10, we introduced the following changes from previous behaviors: 24*08b48e0bSAndroid Build Coastguard Worker * The '+' feature of the `-t` option now means to auto-calculate the timeout 25*08b48e0bSAndroid Build Coastguard Worker with the value given being the maximum timeout. The original meaning of 26*08b48e0bSAndroid Build Coastguard Worker "skipping timeouts instead of abort" is now inherent to the `-t` option. 27*08b48e0bSAndroid Build Coastguard Worker 28*08b48e0bSAndroid Build Coastguard WorkerWith AFL++ 3.00, we introduced changes that break some previous AFL and AFL++ 29*08b48e0bSAndroid Build Coastguard Workerbehaviors and defaults: 30*08b48e0bSAndroid Build Coastguard Worker * There are no llvm_mode and gcc_plugin subdirectories anymore and there is 31*08b48e0bSAndroid Build Coastguard Worker only one compiler: afl-cc. All previous compilers now symlink to this one. 32*08b48e0bSAndroid Build Coastguard Worker All instrumentation source code is now in the `instrumentation/` folder. 33*08b48e0bSAndroid Build Coastguard Worker * The gcc_plugin was replaced with a new version submitted by AdaCore that 34*08b48e0bSAndroid Build Coastguard Worker supports more features. Thank you! 35*08b48e0bSAndroid Build Coastguard Worker * QEMU mode got upgraded to QEMU 5.1, but to be able to build this a current 36*08b48e0bSAndroid Build Coastguard Worker ninja build tool version and python3 setuptools are required. QEMU mode also 37*08b48e0bSAndroid Build Coastguard Worker got new options like snapshotting, instrumenting specific shared libraries, 38*08b48e0bSAndroid Build Coastguard Worker etc. Additionally QEMU 5.1 supports more CPU targets so this is really worth 39*08b48e0bSAndroid Build Coastguard Worker it. 40*08b48e0bSAndroid Build Coastguard Worker * When instrumenting targets, afl-cc will not supersede optimizations anymore 41*08b48e0bSAndroid Build Coastguard Worker if any were given. This allows to fuzz targets build regularly like those 42*08b48e0bSAndroid Build Coastguard Worker for debug or release versions. 43*08b48e0bSAndroid Build Coastguard Worker * afl-fuzz: 44*08b48e0bSAndroid Build Coastguard Worker * if neither `-M` or `-S` is specified, `-S default` is assumed, so more 45*08b48e0bSAndroid Build Coastguard Worker fuzzers can easily be added later 46*08b48e0bSAndroid Build Coastguard Worker * `-i` input directory option now descends into subdirectories. It also does 47*08b48e0bSAndroid Build Coastguard Worker not fail on crashes and too large files, instead it skips them and uses 48*08b48e0bSAndroid Build Coastguard Worker them for splicing mutations 49*08b48e0bSAndroid Build Coastguard Worker * `-m` none is now the default, set memory limits (in MB) with, e.g., `-m 50*08b48e0bSAndroid Build Coastguard Worker 250` 51*08b48e0bSAndroid Build Coastguard Worker * deterministic fuzzing is now disabled by default (unless using `-M`) and 52*08b48e0bSAndroid Build Coastguard Worker can be enabled with `-D` 53*08b48e0bSAndroid Build Coastguard Worker * a caching of test cases can now be performed and can be modified by 54*08b48e0bSAndroid Build Coastguard Worker editing config.h for `TESTCASE_CACHE` or by specifying the environment 55*08b48e0bSAndroid Build Coastguard Worker variable `AFL_TESTCACHE_SIZE` (in MB). Good values are between 50-500 56*08b48e0bSAndroid Build Coastguard Worker (default: 50). 57*08b48e0bSAndroid Build Coastguard Worker * `-M` mains do not perform trimming 58*08b48e0bSAndroid Build Coastguard Worker * `examples/` got renamed to `utils/` 59*08b48e0bSAndroid Build Coastguard Worker * `libtokencap/`, `libdislocator/`, and `qdbi_mode/` were moved to `utils/` 60*08b48e0bSAndroid Build Coastguard Worker * afl-cmin/afl-cmin.bash now search first in `PATH` and last in `AFL_PATH` 61