aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvan Hauser <vh@thc.org>2020-09-10 08:54:57 +0200
committervan Hauser <vh@thc.org>2020-09-10 08:54:57 +0200
commitfdb0452245672db94be0832288f1335e905a2fc8 (patch)
tree8bbac9c1a645eb9895efcb9b32fe7413321b66ad
parent454a860020048c5531f518b5691c92949bdc8017 (diff)
downloadafl++-fdb0452245672db94be0832288f1335e905a2fc8.tar.gz
update documentation
-rw-r--r--README.md12
-rw-r--r--instrumentation/README.gcc_plugin.md11
2 files changed, 16 insertions, 7 deletions
diff --git a/README.md b/README.md
index fb59835c..2fc9d807 100644
--- a/README.md
+++ b/README.md
@@ -41,7 +41,7 @@ behaviours:
* When instrumenting targets, afl-cc will not supersede optimizations. This
allows to fuzz targets as same as they are built for debug or release.
* afl-fuzz' `-i` option now descends into subdirectories.
- * afl-fuzz will skip over empty dictionaries and too large test cases instead
+ * afl-fuzz will skip over empty dictionaries and too-large test cases instead
of failing.
## Contents
@@ -63,20 +63,20 @@ behaviours:
| Feature/Instrumentation | afl-gcc | llvm | gcc_plugin | qemu_mode | unicorn_mode |
| -------------------------|:-------:|:---------:|:----------:|:----------------:|:------------:|
- | NeverZero | x86[_64]| x(1) | (2) | x | x |
+ | NeverZero | x86[_64]| x(1) | x | x | x |
| Persistent Mode | | x | x | x86[_64]/arm[64] | x |
| LAF-Intel / CompCov | | x | | x86[_64]/arm[64] | x86[_64]/arm |
| CmpLog | | x | | x86[_64]/arm[64] | |
- | Selective Instrumentation| | x | x | (x)(3) | |
+ | Selective Instrumentation| | x | x | x | |
| Non-Colliding Coverage | | x(4) | | (x)(5) | |
| Ngram prev_loc Coverage | | x(6) | | | |
| Context Coverage | | x(6) | | | |
| Auto Dictionary | | x(7) | | | |
- | Snapshot LKM Support | | x | | (x)(5) | |
+ | Snapshot LKM Support | | x | x | (x)(5) | |
1. default for LLVM >= 9.0, env var for older version due an efficiency bug in llvm <= 8
2. GCC creates non-performant code, hence it is disabled in gcc_plugin
- 3. partially via AFL_CODE_START/AFL_CODE_END
+ 3. (currently unassigned)
4. with pcguard mode and LTO mode for LLVM >= 11
5. upcoming, development in the branch
6. not compatible with LTO instrumentation and needs at least LLVM >= 4.1
@@ -92,8 +92,6 @@ behaviours:
* AFLfast's power schedules by Marcel Böhme: [https://github.com/mboehme/aflfast](https://github.com/mboehme/aflfast)
* The MOpt mutator: [https://github.com/puppet-meteor/MOpt-AFL](https://github.com/puppet-meteor/MOpt-AFL)
* LLVM mode Ngram coverage by Adrian Herrera [https://github.com/adrianherrera/afl-ngram-pass](https://github.com/adrianherrera/afl-ngram-pass)
- * C. Holler's afl-fuzz Python mutator module: [https://github.com/choller/afl](https://github.com/choller/afl)
- * Custom mutator by a library (instead of Python) by kyakdan
* LAF-Intel/CompCov support for instrumentation, qemu_mode and unicorn_mode (with enhanced capabilities)
* Radamsa and honggfuzz mutators (as custom mutators).
* QBDI mode to fuzz android native libraries via Quarkslab's [QBDI](https://github.com/QBDI/QBDI) framework
diff --git a/instrumentation/README.gcc_plugin.md b/instrumentation/README.gcc_plugin.md
index 53519b90..919801d1 100644
--- a/instrumentation/README.gcc_plugin.md
+++ b/instrumentation/README.gcc_plugin.md
@@ -3,6 +3,13 @@
See [../README.md](../README.md) for the general instruction manual.
See [README.llvm.md](README.llvm.md) for the LLVM-based instrumentation.
+TLDR:
+ * `apt-get install gcc-VERSION-plugin-dev`
+ * `make`
+ * gcc and g++ must point to the gcc-VERSION you you have to set AFL_CC/AFL_CXX
+ to point to these!
+ * just use afl-gcc-fast/afl-g++-fast normally like you would afl-clang-fast
+
## 1) Introduction
The code in this directory allows you to instrument programs for AFL using
@@ -40,8 +47,12 @@ installing the `gcc-VERSION-plugin-dev` packages.
To build the instrumentation itself, type 'make'. This will generate binaries
called afl-gcc-fast and afl-g++-fast in the parent directory.
+
+The gcc and g++ compiler links have to point to gcc-VERSION - or set these
+by pointing the environment variables AFL_CC/AFL_CXX to them.
If the CC/CXX have been overridden, those compilers will be used from
those wrappers without using AFL_CXX/AFL_CC settings.
+
Once this is done, you can instrument third-party code in a way similar to the
standard operating mode of AFL, e.g.: