def codeify(self, ea=idc.BADADDR): func_count = 0 code_count = 0 if ea == idc.BADADDR: ea = self.get_start_ea(self.CODE) if ea == idc.BADADDR: ea = ida_shims.get_first_seg() print("\nLooking for undefined code starting at: %s:0x%X" % \ (ida_shims.get_segm_name(ea), ea)) while ea != idc.BADADDR: try: if ida_shims.get_segm_attr(ea, idc.SEGATTR_TYPE) == self.CODE: if ida_shims.get_func_name(ea) != '': ea = ida_shims.find_func_end(ea) continue else: if ida_shims.add_func(ea): func_count += 1 elif ida_shims.create_insn(ea): code_count += 1 except: pass ea = ida_shims.next_addr(ea) print("Created %d new functions and %d new code blocks\n" % \ (func_count, code_count))
def get_start_ea(self, attr): ea = idc.BADADDR seg = ida_shims.get_first_seg() while seg != idc.BADADDR: if ida_shims.get_segm_attr(seg, idc.SEGATTR_TYPE) == attr: ea = seg break else: seg = ida_shims.get_next_seg(seg) return ea
def _get_segments(self, attr): segments = [] seg = ida_shims.get_first_seg() while seg != idc.BADADDR: if ida_shims.get_segm_attr(seg, idc.SEGATTR_TYPE) == attr: start = ida_shims.get_segm_start(seg) end = ida_shims.get_segm_end(seg) segments.append((start, end)) seg = ida_shims.get_next_seg(seg) return segments
def get_data_section(self): ea = idc.BADADDR seg = ida_shims.get_first_seg() stop = idc.BADADDR while seg != idc.BADADDR: if ea == idc.BADADDR and \ ida_shims.get_segm_attr(seg, idc.SEGATTR_TYPE) == 2: ea = seg stop = ida_shims.get_segm_end(seg) seg = ida_shims.get_next_seg(seg) return ea, stop