示例#1
0
def get_func_limits(pfn, limits):
    import ida_range
    rs = ida_range.rangeset_t()
    if get_func_ranges(rs, pfn) == ida_idaapi.BADADDR:
        return False
    limits.start_ea = rs.begin().start_ea
    limits.end_ea = rs.begin().end_ea
    return True
示例#2
0
文件: py_funcs.py 项目: AmesianX/src
def get_func_limits(pfn, limits):
    import ida_range
    rs = ida_range.rangeset_t()
    if get_func_ranges(rs, pfn) == ida_idaapi.BADADDR:
        return False
    limits.start_ea = rs.begin().start_ea
    limits.end_ea = rs.begin().end_ea
    return True
示例#3
0
    def req_rln(self, hash):
        raddr = hash['raddr']

        rs_debug("rln: 0x%x" % raddr)

        addr = self.rebase_local(raddr)
        if not addr:
            rs_log("could not rebase this address (0x%x)" % raddr)
            return

        sym = idaapi.get_func_name(addr)
        if sym:
            sym = self.demangle(sym)
            func = idaapi.get_func(addr)
            if not func:
                rs_log("could not find func for 0x%x" % addr)
                return

            lck = idaapi.lock_func(func)
            limits = ida_range.range_t()
            rs = ida_range.rangeset_t()

            if ida_funcs.get_func_ranges(rs, func) != ida_idaapi.BADADDR:
                limits.start_ea = rs.begin().start_ea
                limits.end_ea = rs.begin().end_ea

                if limits.start_ea != addr:
                    if (addr > limits.start_ea):
                        sym = "%s%s0x%x" % (sym, "+", addr - limits.start_ea)
                    else:
                        sym = "%s%s0x%x" % (sym, "-", limits.start_ea - addr)
            lck = None
        else:
            sym = idc.get_name(addr, ida_name.GN_VISIBLE)
            if sym:
                sym = self.demangle(sym)

        if sym:
            self.notice_broker('cmd', "\"cmd\":\"%s\"" % sym)
            rs_debug("resolved symbol: %s" % sym)
        else:
            rs_log("could not resolve symbol for address 0x%x" % addr)