diff --git a/src/SConscript b/src/SConscript index d41215f6b5046e7c20d5264890c64372e814801c..65471d414277aae4f8dc2e0d72664ae6572fc450 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 9ef80fbaa6ceab1f977535f08b3a5d7c15719661..05d1c2bb2c704bc9b30cf29e2ebd2b3a4ee4c451 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 4dcb27412df3a5271a09d02fd82925b9f72da6c4..81ba7771bbebaf5f21e17ed1e50617b60dce48d0 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;