def __call__(self): ida_segment.set_segm_end(self.ea, self.newend, 0)
def add_segment(ea, size, seg_class, debug=False): # align page size ea = ea & 0xFFFFF000 end_ea = ea + size is_changed = False if ea == 0: return False while ea < end_ea: cur_seg = ida_segment.getseg(ea) next_seg = ida_segment.get_next_seg(ea) if debug: print("=" * 30) if cur_seg: print("cur_seg: %x - %x" % (cur_seg.start_ea, cur_seg.end_ea)) if next_seg: print("next_seg: %x - %x" % (next_seg.start_ea, next_seg.end_ea)) print("new_seg: %x - %x" % (ea, end_ea)) # if there is no segment, so create new segment if not cur_seg: if not next_seg: ida_segment.add_segm(0, ea, end_ea, "", seg_class) is_changed = True break # if next_seg exists if end_ea <= next_seg.start_ea: ida_segment.add_segm(0, ea, end_ea, "", seg_class) is_changed = True break # end_ea > next_seg.start_ea, need to create more segments ida_segment.add_segm(0, ea, next_seg.start_ea, "", seg_class) # if segment already exists, we extend current segment else: if end_ea <= cur_seg.end_ea: break if not next_seg: ida_segment.set_segm_end(ea, end_ea, 0) ida_segment.set_segm_class(cur_seg, seg_class) is_changed = True break # if next_seg exists if end_ea <= next_seg.start_ea: ida_segment.set_segm_end(ea, end_ea, 0) ida_segment.set_segm_class(cur_seg, seg_class) is_changed = True break # end_ea > next_seg.start_ea, need to create more segments if cur_seg.end_ea < next_seg.start_ea: ida_segment.set_segm_end(ea, next_seg.start_ea, 0) ida_segment.set_segm_class(cur_seg, seg_class) is_changed = True ea = next_seg.start_ea return is_changed