Ejemplo n.º 1
0
    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"
Ejemplo n.º 2
0
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