aboutsummaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorvan Hauser <vh@thc.org>2020-11-18 21:25:35 +0100
committerGitHub <noreply@github.com>2020-11-18 21:25:35 +0100
commit4d9eb9bda147a26fc8cbe885b6193cf0c94c6314 (patch)
treec7a903633c7d1b0b5e373535188fd3a458a7f329 /docs
parent4c59c5234aec0469e4dd02561dbd84387bd53155 (diff)
parentcd0a25be5e9b05a2ab6a11592cd95e7f653bf42d (diff)
downloadafl++-4d9eb9bda147a26fc8cbe885b6193cf0c94c6314.tar.gz
Merge pull request #607 from AFLplusplus/dev
push to stable
Diffstat (limited to 'docs')
-rw-r--r--docs/Changelog.md13
-rw-r--r--docs/custom_mutators.md13
-rw-r--r--docs/env_variables.md21
3 files changed, 42 insertions, 5 deletions
diff --git a/docs/Changelog.md b/docs/Changelog.md
index 50c1d48a..9426ed54 100644
--- a/docs/Changelog.md
+++ b/docs/Changelog.md
@@ -38,22 +38,27 @@ sending a mail to <afl-users+subscribe@googlegroups.com>.
- added INTROSPECTION make target that writes all mutations to
out/NAME/introspection.txt
- print special compile time options used in help output
+ - somewhere we broke -n dumb fuzzing, fixed
- instrumentation
- We received an enhanced gcc_plugin module from AdaCore, thank you
very much!!
- not overriding -Ox or -fno-unroll-loops anymore
- we now have our own trace-pc-guard implementation. It is the same as
-fsanitize-coverage=trace-pc-guard from llvm 12, but: it is a) inline
- and b) works from llvm 10+ on :)
+ and b) works from llvm 10.0.1 + onwards :)
- new llvm pass: dict2file via AFL_LLVM_DICT2FILE, create afl-fuzz
-x dictionary of string comparisons found during compilation
- LTO autodict now also collects interesting cmp comparisons,
std::string compare + find + ==, bcmp
- fix crash in dict2file for integers > 64 bit
+ - custom mutators
+ - added a new custom mutator: symcc -> https://github.com/eurecom-s3/symcc/
+ - added a new custom mutator: libfuzzer that integrates libfuzzer mutations
+ - Our afl++ Grammar-Mutator is now better integrated into custom_mutators/
+ - added INTROSPECTION support for custom modules
+ - python fuzz function was not optional, fixed
- unicornafl synced with upstream (arm64 fix, better rust bindings)
- - added a new custom mutator: symcc -> https://github.com/eurecom-s3/symcc/
- - added a new custom mutator: libfuzzer that integrates libfuzzer mutations
- - Our afl++ Grammar-Mutator is now better integrated into custom_mutators/
+ - renamed AFL_DEBUG_CHILD_OUTPUT to AFL_DEBUG_CHILD
### Version ++2.68c (release)
diff --git a/docs/custom_mutators.md b/docs/custom_mutators.md
index 81ee9de4..53f783fe 100644
--- a/docs/custom_mutators.md
+++ b/docs/custom_mutators.md
@@ -42,6 +42,7 @@ size_t afl_custom_havoc_mutation(void *data, unsigned char *buf, size_t buf_size
unsigned char afl_custom_havoc_mutation_probability(void *data);
unsigned char afl_custom_queue_get(void *data, const unsigned char *filename);
void afl_custom_queue_new_entry(void *data, const unsigned char *filename_new_queue, const unsigned int *filename_orig_queue);
+const char* afl_custom_introspection(my_mutator_t *data);
void afl_custom_deinit(void *data);
```
@@ -81,6 +82,9 @@ def queue_new_entry(filename_new_queue, filename_orig_queue):
pass
```
+def introspection():
+ return string
+
### Custom Mutation
- `init`:
@@ -126,10 +130,19 @@ def queue_new_entry(filename_new_queue, filename_orig_queue):
`post_process` function. This function is then transforming the data into the
format expected by the API before executing the target.
+ This can return any python object that implements the buffer protocol and
+ supports PyBUF_SIMPLE. These include bytes, bytearray, etc.
+
- `queue_new_entry` (optional):
This methods is called after adding a new test case to the queue.
+- `introspection` (optional):
+
+ This method is called after a new queue entry, crash or timeout is
+ discovered if compiled with INTROSPECTION. The custom mutator can then
+ return a string (const char *) that reports the exact mutations used.
+
- `deinit`:
The last method to be called, deinitializing the state.
diff --git a/docs/env_variables.md b/docs/env_variables.md
index a36f2b4e..04ba032a 100644
--- a/docs/env_variables.md
+++ b/docs/env_variables.md
@@ -306,6 +306,14 @@ checks or alter some of the more exotic semantics of the tool:
don't want AFL++ to spend too much time classifying that stuff and just
rapidly put all timeouts in that bin.
+ - Setting `AFL_FORKSRV_INIT_TMOUT` allows you to specify a different timeout
+ to wait for the forkserver to spin up. The default is the `-t` value times
+ `FORK_WAIT_MULT` from `config.h` (usually 10), so for a `-t 100`, the
+ default would wait for `1000` milliseconds. Setting a different time here is useful
+ if the target has a very slow startup time, for example when doing
+ full-system fuzzing or emulation, but you don't want the actual runs
+ to wait too long for timeouts.
+
- `AFL_NO_ARITH` causes AFL++ to skip most of the deterministic arithmetics.
This can be useful to speed up the fuzzing of text-based file formats.
@@ -380,8 +388,12 @@ checks or alter some of the more exotic semantics of the tool:
processing the first queue entry; and `AFL_BENCH_UNTIL_CRASH` causes it to
exit soon after the first crash is found.
- - Setting `AFL_DEBUG_CHILD_OUTPUT` will not suppress the child output.
+ - Setting `AFL_DEBUG_CHILD` will not suppress the child output.
+ This lets you see all output of the child, making setup issues obvious.
+ For example, in an unicornafl harness, you might see python stacktraces.
+ You may also see other logs that way, indicating why the forkserver won't start.
Not pretty but good for debugging purposes.
+ Note that `AFL_DEBUG_CHILD_OUTPUT` is deprecated.
- Setting `AFL_NO_CPU_RED` will not display very high cpu usages in red color.
@@ -389,6 +401,13 @@ checks or alter some of the more exotic semantics of the tool:
for an existing out folder, even if a different `-i` was provided.
Without this setting, afl-fuzz will refuse execution for a long-fuzzed out dir.
+ - Setting `AFL_MAX_DET_EXRAS` will change the threshold at what number of elements
+ in the `-x` dictionary and LTO autodict (combined) the probabilistic mode will
+ kick off. In probabilistic mode not all dictionary entires will be used all
+ of the times for fuzzing mutations to not slow down fuzzing.
+ The default count is `200` elements. So for the 200 + 1st element, there is a
+ 1 in 201 chance, that one of the dictionary entries will not be used directly.
+
- Setting `AFL_NO_FORKSRV` disables the forkserver optimization, reverting to
fork + execve() call for every tested input. This is useful mostly when
working with unruly libraries that create threads or do other crazy