def _analysis(self): parser=LogParser() parser.setRedundantLevel(self.args.level) l=parser.parse(self.args.trace) if self.args.c_project_dir is not None: macro_inspector=MacroInspector(self.args.c_project_dir) tracker=Tracker(l,macro_inspector) else: tracker=Tracker(l) for line in l: print str(l.index(line))+"#"+str(line) traceIndex=(len(l)+self.args.index)%len(l) vs=self.build_tiantvars_list() tracker.setStartJobs(traceIndex, vs) TG=tracker.track() output=file(self.args.output_path+"/"+self.args.name+".dot", 'w') print TG.serialize2dot() output.write(TG.serialize2dot()) output.close() subprocess.call("dot -Tsvg "+self.args.output_path+"/"+self.args.name+".dot -o "+self.args.output_path+"/"+self.args.name+".svg", shell = True)
def parse_list(self): parser=LogParser() #parser.setRedundantLevel(RedundancyFixer.REMOVE_INLINE_REDUNDANT) parser.setRedundantLevel(RedundancyFixer.REMOVE_INTERPROCEDURAL_REDUNDANT) l=parser.parse(self.logfile_path) return l
if self.l[i+1].get_func_name().split("::")[-1].strip() in self.l[i].codestr: return Syntax.RETURN_VALUE_ASSIGN elif self.isMacroCall(i): return Syntax.RETURN_VALUE_ASSIGN return Syntax.NORMAL_ASSIGN op_assignment=Syntax.op_assignment_pattern(access) if re.search(op_assignment,codestr): return Syntax.OP_ASSIGN raw_definition=r"^\s*\{\s*[A-Za-z_][A-Za-z0-9_]+\s+(\*\s*)*([A-Za-z_][A-Za-z0-9_]+\s*,\s*)*"+var.v+"\s*;" if re.search(raw_definition, codestr): print "We got the raw definition!",codestr return Syntax.RAW_DEF if Syntax.isLibArgDef(var,codestr): return Syntax.SYS_LIB_DEF return Syntax.NODEF if __name__=="__main__": parser=LogParser() l=parser.parse("test/gdb_logs/swfmill-0.3.3/gdb-swfmill-0.3.3.txt") tracker=Tracker(l) traceIndex=len(l)-1 tracker.setStartJobs(traceIndex, [TaintVar("length",[])]) TG=tracker.track() output=file("output.dot", 'w') print TG.serialize2dot() output.write(TG.serialize2dot()) output.close() subprocess.call("dot -Tpng output.dot -o output.png", shell = True) #print str(TG)