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)
예제 #3
0
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
예제 #4
0
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)