This part is implemented based on AFL's LLVM mode, where the distance generation is inspired from Bohme's CCS2017 paper "Directed Greybox Fuzzing" but with our augments in multiple aspects. It consists of the following tools:
-fot-conf=/path/to/llvm.toml
which takes a configuration file (e.g., llvm.toml) used throughout the static analysis. For 1), the analysis is based on the result of according to our forked SVF pointer analysis, the output is a yaml file "callgraph.yaml" (thanks to LLVM Yaml serialization/deserialization module).-fot-conf=/path/to/llvm.toml
. This option can be directly appended to the CFLAGS and CXXFLAGS environment variables. For most of the projects, it is a drop-in replacement for Clang/Clang++ driver without any other manual work.The fuzzer parts actually consists of two major levels: one is the core libraries used for common fuzzing purposes; the other provides our default dynamic fuzzing implementations.
The core libraries include multiple modules:
There are two built-in fuzzing tools built on top of these modules:
Complementary toolchain