def map_segments(li, table, file_offset, mclib_addr, no_save): for name, addr, size in table: seg = ida_segment.segment_t() seg.start_ea = BASE_ADDR + addr sclass = "CODE" if name in [b"image_h", b"img-hdr"]: sclass = "DATA" elif name == b"mclib": seg.start_ea = mclib_addr - 8 elif name == b"rtm": seg.start_ea = S0CB_ADDR elif name in TRUSTLETS: if not no_save: extract_binary(li, name + b".tlbin", file_offset + addr, size) continue elif name != b"mtk": ida_kernwin.info("Unknown table entry '%s'" % decode(name)) continue seg.end_ea = seg.start_ea + size seg.bitness = 1 ida_segment.add_segm_ex(seg, decode(name), sclass, 0) li.file2base(file_offset + addr, seg.start_ea, seg.end_ea - 1, 0) if not no_save: filename = b"%s_%08x.bin" % (name, seg.start_ea) extract_binary(li, filename, file_offset + addr, size)
def __call__(self): seg = ida_segment.segment_t() seg.start_ea = self.start_ea seg.end_ea = self.end_ea seg.orgbase = self.orgbase seg.align = self.align seg.comb = self.comb seg.perm = self.perm seg.bitness = self.bitness seg.flags = self.flags ida_segment.add_segm_ex( seg, Event.encode(self.name), self.class_, ida_segment.ADDSEG_QUIET | ida_segment.ADDSEG_NOSREG)
def load_file(li, neflags, format): flags = ida_idp.SETPROC_LOADER_NON_FATAL | ida_idp.SETPROC_LOADER ida_idp.set_processor_type("arm", flags) header = parse_header(li) offset = header.header_size while True: li.seek(offset) if li.read(1) != b'\x00': break offset += 1 length = header.content_size - (offset - header.header_size) seg = ida_segment.segment_t() seg.start_ea = header.base_address seg.end_ea = seg.start_ea + length seg.bitness = 1 ida_segment.add_segm_ex(seg, "ROM", "CODE", 0) li.file2base(offset, seg.start_ea, seg.end_ea - 1, 0) ida_segregs.split_sreg_range(seg.start_ea, ida_idp.str2reg("T"), 1, ida_segregs.SR_user) return 1
def add_segment(addr, size, name): seg = ida_segment.segment_t() seg.start_ea = addr seg.end_ea = seg.start_ea + size seg.bitness = 1 ida_segment.add_segm_ex(seg, name, "DATA", 0)