mirror of
https://github.com/AFLplusplus/AFLplusplus.git
synced 2025-06-21 13:51:18 +00:00
set instrim as default and updated documentation
This commit is contained in:
@ -82,6 +82,9 @@ discussed in section #1, with the exception of:
|
||||
- TMPDIR and AFL_KEEP_ASSEMBLY, since no temporary assembly files are
|
||||
created.
|
||||
|
||||
- AFL_INST_RATIO, as we switched for instrim instrumentation which
|
||||
is more effective but makes not much sense together with this option.
|
||||
|
||||
Then there are a few specific features that are only available in llvm_mode:
|
||||
|
||||
LAF-INTEL
|
||||
@ -108,16 +111,16 @@ Then there are a few specific features that are only available in llvm_mode:
|
||||
|
||||
OTHER
|
||||
=====
|
||||
- Setting export AFL_LLVM_NOT_ZERO=1 during compilation will use counters
|
||||
- Setting LOOPHEAD=1 optimized loops. afl-fuzz will only be able to
|
||||
see the path the loop took, but not how many times it was called
|
||||
(unless its a complex loop).
|
||||
|
||||
- Setting AFL_LLVM_NOT_ZERO=1 during compilation will use counters
|
||||
that skip zero on overflow. This is the default for llvm >= 9,
|
||||
however for llvm versions below that this will increase an unnecessary
|
||||
slowdown due a performance issue that is only fixed in llvm 9+.
|
||||
This feature increases path discovery by a little bit.
|
||||
|
||||
Note that AFL_INST_RATIO will behave a bit differently than for afl-gcc,
|
||||
because functions are *not* instrumented unconditionally - so low values
|
||||
will have a more striking effect. For this tool, 0 is not a valid choice.
|
||||
|
||||
3) Settings for afl-fuzz
|
||||
------------------------
|
||||
|
||||
|
@ -98,10 +98,10 @@ namespace {
|
||||
|
||||
if (getenv("LOOPHEAD")) {
|
||||
LoopHeadOpt = true;
|
||||
MarkSetOpt = true;
|
||||
} else if (getenv("MARKSET")) {
|
||||
MarkSetOpt = true;
|
||||
}
|
||||
|
||||
// this is our default
|
||||
MarkSetOpt = true;
|
||||
|
||||
/* // I dont think this makes sense to port into LLVMInsTrim
|
||||
char* inst_ratio_str = getenv("AFL_INST_RATIO");
|
||||
|
@ -78,13 +78,32 @@ Note: if you want the LLVM helper to be installed on your system for all
|
||||
users, you need to build it before issuing 'make install' in the parent
|
||||
directory.
|
||||
|
||||
3) Gotchas, feedback, bugs
|
||||
3) Options
|
||||
|
||||
Several options are present to make llvm_mode faster or help it rearrange
|
||||
the code to make afl-fuzz path discovery easier.
|
||||
|
||||
If you need just to instrument specific parts of the code, you can whitelist
|
||||
which C/C++ files to actually intrument. See README.whitelist
|
||||
|
||||
For splitting memcmp, strncmp, etc. please see README.laf-intel
|
||||
|
||||
As the original afl llvm_mode implementation has been replaced with
|
||||
then much more effective instrim (https://github.com/csienslab/instrim/)
|
||||
there is an option for optimizing loops. This optimization shows which
|
||||
part of the loop has been selected, but not how many time a loop has been
|
||||
called in a row (unless its a complex loop and a block inside was
|
||||
instrumented). If you want to enable this set the environment variable
|
||||
LOOPHEAD=1
|
||||
|
||||
|
||||
4) Gotchas, feedback, bugs
|
||||
--------------------------
|
||||
|
||||
This is an early-stage mechanism, so field reports are welcome. You can send bug
|
||||
reports to <afl-users@googlegroups.com>.
|
||||
|
||||
4) Bonus feature #1: deferred instrumentation
|
||||
5) Bonus feature #1: deferred instrumentation
|
||||
---------------------------------------------
|
||||
|
||||
AFL tries to optimize performance by executing the targeted binary just once,
|
||||
@ -131,7 +150,7 @@ will keep working normally when compiled with a tool other than afl-clang-fast.
|
||||
Finally, recompile the program with afl-clang-fast (afl-gcc or afl-clang will
|
||||
*not* generate a deferred-initialization binary) - and you should be all set!
|
||||
|
||||
5) Bonus feature #2: persistent mode
|
||||
6) Bonus feature #2: persistent mode
|
||||
------------------------------------
|
||||
|
||||
Some libraries provide APIs that are stateless, or whose state can be reset in
|
||||
@ -171,7 +190,7 @@ PS. Because there are task switches still involved, the mode isn't as fast as
|
||||
faster than the normal fork() model, and compared to in-process fuzzing,
|
||||
should be a lot more robust.
|
||||
|
||||
6) Bonus feature #3: new 'trace-pc-guard' mode
|
||||
8) Bonus feature #3: new 'trace-pc-guard' mode
|
||||
----------------------------------------------
|
||||
|
||||
Recent versions of LLVM are shipping with a built-in execution tracing feature
|
||||
|
Reference in New Issue
Block a user