def work(self): def strip_tags(text): return re.sub(r'<[^><\(\)]*?>', '', text) proj = self.base_proj.openCopy() database = proj.database if self.scope == 'all': procs = sorted(database.getAll()) elif self.scope == 'bank': procs = sorted(database.getAllInBank(self.bank)) elif self.scope == 'proc': procs = [address.fromConventional(self.address)] else: raise AttributeError num_procs = len(procs) i = 0 with open(self.filename, "wb") as f: for addr in procs: if self.requestCancel: self.report(i, num_procs, "Cancelled") return self.report(i, num_procs, "Analyzing proc: " + str(addr)) renderer = HtmlRenderer(database) if self.mode == 'symbols': if database.hasNameForAddress(addr): renderer.add(str(addr) + ' ' + database.nameForAddress(addr)) else: renderer.add(str(addr)) elif self.mode == 'basic': procedure.loadProcedureRange(proj, addr).render(renderer) elif self.mode == 'flow': proj.flow.uncached(addr).render(renderer) else: raise AttributeError print >>f, strip_tags(renderer.getContents()) i += 1 proj.close() self.report(i, num_procs, "Done!")
def load(self): p = self.url.split('/') self.addr = address.fromConventional(p[2]) self.info = self.proj.database.procInfo(self.addr) self.proc = loadProcedureRange(self.proj, self.addr)