def extract(self, filename): f = open(filename, "w") i = 0 last_prog_update = 0 f.write("%s\n" % GetInputFile()) print "Retrieving functions" funcs = Functions(*self._range) print "Parsing functions" print " 0%" for ea in funcs: chunks = [] names = [] func = idaapi.get_func(ea) iter = func_item_iterator_t(func) ea = iter.current() prev_chunknum = idaapi.get_func_chunknum(func, ea) cur_chunk = [ ea, ea ] chunks.append(cur_chunk) while True: ea = iter.current() cur_chunknum = idaapi.get_func_chunknum(func, ea) if cur_chunknum != prev_chunknum: prev_chunknum = cur_chunknum cur_chunk = [ ea, ea ] chunks.append(cur_chunk) else: cur_chunk[1] = ea s = util.scan_insn_for_debug_ref(ea) if s != None: if not s in names: names.append(s) if not iter.next_code(): break if len(names) == 1: for start_addr, end_addr in chunks: f.write("0x%x;0x%x;%s\n" % \ (start_addr, end_addr, names[0])) i += 1 progress = int((float(i) / float(len(funcs))) * 100.0) if progress - last_prog_update >= 10: print " %d%%" % progress last_prog_update = progress f.close() print "Done"
def find_unmapped_funcs(): funcs = {} i = 0 ea = 0 max_ea = 0xFFFFFFFF while True: ea = NextHead(ea, max_ea) if ea == BADADDR: break flags = idaapi.getFlags(ea) if idaapi.isCode(flags): if not idaapi.get_func(ea): s = util.scan_insn_for_debug_ref(ea) if s != None: if not s in funcs: funcs[s] = ea return funcs