Esempio n. 1
0
def dump_tails(pfn):
    "dump function tails for entry chunk pfn"
    assert ida_funcs.is_func_entry(pfn)
    print("Function has %d tails" % pfn.tailqty)
    for i in range(pfn.tailqty):
        ft = pfn.tails[i]
        print("  tail %i: %08X..%08X" % (i, ft.start_ea, ft.end_ea))
Esempio n. 2
0
def dump_regvars(pfn):
    "dump renamed registers information"
    assert ida_funcs.is_func_entry(pfn)
    print("Function has %d renamed registers" % pfn.regvarqty)
    for rv in pfn.regvars:
        print("%08X..%08X '%s'->'%s'" %
              (rv.start_ea, rv.end_ea, rv.canon, rv.user))
Esempio n. 3
0
def dump_frame(fn):
    "dump function frame info"
    assert ida_funcs.is_func_entry(fn)
    print("frame structure id: %08X" % fn.frame)
    print("local variables area size: %8X" % fn.frsize)
    print("saved registers area size: %8X" % fn.frregs)
    print("bytes purged on return   : %8X" % fn.argsize)
    print("frame pointer delta      : %8X" % fn.fpd)
Esempio n. 4
0
def dump_regargs(pfn):
    "dump register arguments information"
    assert ida_funcs.is_func_entry(pfn)
    print("Function has %d register arguments" % pfn.regargqty)
    for ra in pfn.regargs:
        print(
            "  register #=%d, argument name=\"%s\", (serialized) type=\"%s\"" %
            (ra.reg, ra.name, binascii.hexlify(ra.type)))
Esempio n. 5
0
def dump_func_info(ea):
    "dump info about function chunk at address 'ea'"
    pfn = ida_funcs.get_fchunk(ea)
    if pfn is None:
        print("No function at %08X!" % ea)
        return
    print("current chunk boundaries: %08X..%08X" % (pfn.start_ea, pfn.end_ea))
    dump_flags(pfn)
    if (ida_funcs.is_func_entry(pfn)):
        print("This is an entry chunk")
        dump_tails(pfn)
        dump_frame(pfn)
        dump_regvars(pfn)
        dump_regargs(pfn)
        dump_stkpnts(pfn)
    elif (ida_funcs.is_func_tail(pfn)):
        print("This is a tail chunk")
        dump_parents(pfn)