From 4a33feb5168a3c93e84ee85b03b584a597807533 Mon Sep 17 00:00:00 2001
From: Anh <zenpoems@gmail.com>
Date: Fri, 17 Aug 2018 17:13:23 +0000
Subject: [PATCH] Option to set entry point of afl fork server

---
 src/SConscript  |  3 +++
 src/SConstruct  |  1 -
 src/libzafl.cpp | 21 ++++++++++++++++-----
 3 files changed, 19 insertions(+), 6 deletions(-)

diff --git a/src/SConscript b/src/SConscript
index d41215f..65471d4 100644
--- a/src/SConscript
+++ b/src/SConscript
@@ -13,10 +13,13 @@ cpppath='''
         '''
 
 myenv=myenv.Clone(CPPPATH=Split(cpppath))
+
 myenv.Append(CXXFLAGS = " -std=c++11 ")
+#myenv.Append(CXXFLAGS = " -std=c++11 -DZAFL_AUTO_INIT_FORK_SERVER")
 
 lib=myenv.SharedLibrary("zafl",  Split(files))
 install=myenv.Install("$SECURITY_TRANSFORMS_HOME/lib/", lib)
+
 Default(install)
 
 Return('install')
diff --git a/src/SConstruct b/src/SConstruct
index 9ef80fb..05d1c2b 100644
--- a/src/SConstruct
+++ b/src/SConstruct
@@ -5,7 +5,6 @@ Export('env')
 
 env.Replace(debug=ARGUMENTS.get("debug",0))
 
-
 if int(env['debug']) == 1:
         print "Setting debug mode"
         env.Append(CFLAGS=" -g ")
diff --git a/src/libzafl.cpp b/src/libzafl.cpp
index 4dcb274..81ba777 100644
--- a/src/libzafl.cpp
+++ b/src/libzafl.cpp
@@ -44,16 +44,28 @@ static auto debug = false;
 static void zafl_setupSharedMemory();
 static bool shared_memory_is_setup = false;
 
+#ifdef ZAFL_AUTO_INIT_FORK_SERVER
 void __attribute__((constructor)) zafl_initAflForkServer();
+#else
+void __attribute__((constructor)) zafl_setupSharedMemory();
+#endif
 
 static void zafl_setupSharedMemory()
 {
+	if (getenv("ZAFL_DEBUG")) debug = true;
+
+	if (shared_memory_is_setup)
+		return;
+
 	zafl_prev_id = 0;
 	zafl_trace_map = NULL;
 
 	char *shm_env_var = getenv(SHM_ENV_VAR);
 	if(!shm_env_var) {
-		PRINT_ERROR("Error getting shm environment variable\n");
+		PRINT_ERROR("Error getting shm environment variable - fake allocate AFL trace map\n");
+
+		// fake allocate until someone calls zafl_initAflForkServer()
+		zafl_trace_map = (u8*)malloc(MAP_SIZE); 
 		return;
 	}
 	shm_id = atoi(shm_env_var);
@@ -74,8 +86,7 @@ void zafl_initAflForkServer()
 
 	if (getenv("ZAFL_DEBUG")) debug = true;
 
-	if (!shared_memory_is_setup)
-		zafl_setupSharedMemory();
+	zafl_setupSharedMemory();
 
 	if (!zafl_trace_map) {
 		zafl_trace_map = (u8*)malloc(MAP_SIZE);
@@ -121,8 +132,8 @@ void zafl_initAflForkServer()
 	}
 }
 
-// for debugging purposes only
-// basic block instrumentations will be inlined via a Zipr transformation
+// for efficiency, basic block instrumentation is inlined via a Zipr transformation
+// this code is used for debugging purposes only
 void zafl_bbInstrument(unsigned short id) {
 	zafl_trace_map[zafl_prev_id ^ id]++;
 	zafl_prev_id = id >> 1;
-- 
GitLab