diff --git a/afl_transforms/tools/zafl/zafl.cpp b/afl_transforms/tools/zafl/zafl.cpp index db9c20f83c3ba9e5e7d204f9150a2fa52ca8c8c6..dbde355bb2c936ece510ce39ce8b3ce930814511 100644 --- a/afl_transforms/tools/zafl/zafl.cpp +++ b/afl_transforms/tools/zafl/zafl.cpp @@ -56,6 +56,11 @@ Zafl_t::Zafl_t(libIRDB::pqxxDB_t &p_dbinterface, libIRDB::FileIR_t *p_variantIR, m_bb_graph_optimize(false), m_verbose(p_verbose) { + if (m_use_stars) { + cout << "Use STARS analysis engine" << endl; + m_stars_analysis_engine.do_STARS(getFileIR()); + } + auto ed=ElfDependencies_t(getFileIR()); if (p_autozafl) { @@ -67,6 +72,8 @@ Zafl_t::Zafl_t(libIRDB::pqxxDB_t &p_dbinterface, libIRDB::FileIR_t *p_variantIR, cout << "autozafl library is off" << endl; (void)ed.prependLibraryDepedencies("libzafl.so"); } + + m_plt_zafl_initAflForkServer=ed.appendPltEntry("zafl_initAflForkServer"); m_trace_map = ed.appendGotEntry("zafl_trace_map"); m_prev_id = ed.appendGotEntry("zafl_prev_id"); @@ -109,14 +116,10 @@ static void create_got_reloc(FileIR_t* fir, pair<DataScoop_t*,int> wrt, Instruct static RegisterSet_t get_dead_regs(Instruction_t* insn, MEDS_AnnotationParser &meds_ap_param) { - MEDS_AnnotationParser *meds_ap=&meds_ap_param; - - assert(meds_ap); - std::pair<MEDS_Annotations_t::iterator,MEDS_Annotations_t::iterator> ret; /* find it in the annotations */ - ret = meds_ap->getAnnotations().equal_range(insn->GetBaseID()); + ret = meds_ap_param.getAnnotations().equal_range(insn->GetBaseID()); MEDS_DeadRegAnnotation* p_annotation; /* for each annotation for this instruction */ @@ -529,10 +532,6 @@ void Zafl_t::insertForkServer(Instruction_t* p_entry) m_blacklist.insert(ss.str()); - // insert the PLT needed - auto ed=ElfDependencies_t(getFileIR()); - auto plt_zafl_initAflForkServer=ed.appendPltEntry("zafl_initAflForkServer"); - // insert the instrumentation auto tmp=p_entry; (void)insertAssemblyBefore(tmp," push rdi") ; @@ -551,7 +550,7 @@ void Zafl_t::insertForkServer(Instruction_t* p_entry) tmp= insertAssemblyAfter(tmp," push r14 ") ; tmp= insertAssemblyAfter(tmp," push r15 ") ; tmp= insertAssemblyAfter(tmp," pushf ") ; - tmp= insertAssemblyAfter(tmp," call 0 ", plt_zafl_initAflForkServer) ; + tmp= insertAssemblyAfter(tmp," call 0 ", m_plt_zafl_initAflForkServer) ; tmp= insertAssemblyAfter(tmp," popf ") ; tmp= insertAssemblyAfter(tmp," pop r15 ") ; tmp= insertAssemblyAfter(tmp," pop r14 ") ; @@ -726,11 +725,6 @@ int Zafl_t::execute() auto num_bb_instrumented = 0; auto num_orphan_instructions = 0; - if (m_use_stars) { - cout << "Use STARS analysis engine" << endl; - m_stars_analysis_engine.do_STARS(getFileIR()); - } - setupForkServer(); insertExitPoints(); diff --git a/afl_transforms/tools/zafl/zafl.hpp b/afl_transforms/tools/zafl/zafl.hpp index 98e3d9231e07edaaaabb437925b6c87a12eb76ab..91ea4e4da9b8c445e3278d32f5dc534232c3cdc5 100644 --- a/afl_transforms/tools/zafl/zafl.hpp +++ b/afl_transforms/tools/zafl/zafl.hpp @@ -50,6 +50,7 @@ private: std::pair<DataScoop_t*,int> m_trace_map; // afl shared memory trace map std::pair<DataScoop_t*,int> m_prev_id; // id of previous block + Instruction_t* m_plt_zafl_initAflForkServer; std::set<std::string> m_whitelist; std::set<std::string> m_blacklist;