xref: /aosp_15_r20/external/AFLplusplus/docs/important_changes.md (revision 08b48e0b10e97b33e7b60c5b6e2243bd915777f2)
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