aboutsummaryrefslogtreecommitdiff
path: root/llvm_mode
diff options
context:
space:
mode:
authorvan Hauser <vh@thc.org>2019-07-14 10:50:13 +0200
committervan Hauser <vh@thc.org>2019-07-14 10:50:13 +0200
commite66402485342088e6fcaecfe2abbba291a48bda5 (patch)
treea540cac715243825b4d8971dfd368fc09a291da8 /llvm_mode
parent495f3b9a681af527018a92d3d0e3240568ac7997 (diff)
downloadafl++-e66402485342088e6fcaecfe2abbba291a48bda5.tar.gz
whitelist features works now
Diffstat (limited to 'llvm_mode')
-rw-r--r--llvm_mode/LLVMInsTrim.so.cc19
-rw-r--r--llvm_mode/README.llvm10
2 files changed, 20 insertions, 9 deletions
diff --git a/llvm_mode/LLVMInsTrim.so.cc b/llvm_mode/LLVMInsTrim.so.cc
index 62977e97..51640870 100644
--- a/llvm_mode/LLVMInsTrim.so.cc
+++ b/llvm_mode/LLVMInsTrim.so.cc
@@ -1,3 +1,6 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
#include <unistd.h>
#include "llvm/ADT/DenseMap.h"
@@ -131,12 +134,16 @@ namespace {
if (!myWhitelist.empty()) {
bool instrumentBlock = false;
- BasicBlock &BB = F.getEntryBlock();
- BasicBlock::iterator IP = BB.getFirstInsertionPt();
- IRBuilder<> IRB(&(*IP));
- DebugLoc Loc = IP->getDebugLoc();
+ DebugLoc Loc;
StringRef instFilename;
+ for (auto &BB : F) {
+ BasicBlock::iterator IP = BB.getFirstInsertionPt();
+ IRBuilder<> IRB(&(*IP));
+ if (!Loc)
+ Loc = IP->getDebugLoc();
+ }
+
if ( Loc ) {
DILocation *cDILoc = dyn_cast<DILocation>(Loc.getAsMDNode());
@@ -169,7 +176,9 @@ namespace {
* not whitelisted, so we skip instrumentation. */
if (!instrumentBlock) {
if (!instFilename.str().empty())
- SAYF( "Not in whitelist, skipping %s ...\n", instFilename.str().c_str());
+ SAYF(cYEL "[!] " cBRI "Not in whitelist, skipping %s ...\n", instFilename.str().c_str());
+ else
+ SAYF(cYEL "[!] " cBRI "No filename information found, skipping it");
continue;
}
}
diff --git a/llvm_mode/README.llvm b/llvm_mode/README.llvm
index dc860e97..b4e05a7a 100644
--- a/llvm_mode/README.llvm
+++ b/llvm_mode/README.llvm
@@ -38,8 +38,8 @@ co-exists with the original code.
The idea and much of the implementation comes from Laszlo Szekeres.
-2) How to use
--------------
+2) How to use this
+------------------
In order to leverage this mechanism, you need to have clang installed on your
system. You should also make sure that the llvm-config tool is in your path
@@ -69,8 +69,10 @@ operating mode of AFL, e.g.:
Be sure to also include CXX set to afl-clang-fast++ for C++ code.
The tool honors roughly the same environmental variables as afl-gcc (see
-../docs/env_variables.txt). This includes AFL_INST_RATIO, AFL_USE_ASAN,
-AFL_HARDEN, and AFL_DONT_OPTIMIZE.
+../docs/env_variables.txt). This includes AFL_USE_ASAN,
+AFL_HARDEN, and AFL_DONT_OPTIMIZE. However AFL_INST_RATIO is not honored
+as it does not serve a good purpose with the more effective instrim CFG
+analysis.
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