示例#1
0
    def op_type_changed(self, ea, n):
        extra = {}
        mask = ida_bytes.MS_0TYPE if not n else ida_bytes.MS_1TYPE
        flags = ida_bytes.get_full_flags(ea) & mask

        if flags == mask & ida_bytes.hex_flag():
            op = 'hex'
        elif flags == mask & ida_bytes.dec_flag():
            op = 'dec'
        elif flags == mask & ida_bytes.char_flag():
            op = 'chr'
        elif flags == mask & ida_bytes.bin_flag():
            op = 'bin'
        elif flags == mask & ida_bytes.oct_flag():
            op = 'oct'
        elif flags == mask & ida_bytes.enum_flag():
            op = 'enum'
            enum_id = ida_bytes.get_enum_id(ea, n)[0]
            enum_serial = ida_enum.get_enum_idx(enum_id)
            ename = ida_enum.get_enum_name(enum_id)
            extra['ename'] = Unicoder.decode(ename)
            extra['serial'] = enum_serial
        elif flags == mask & ida_bytes.stroff_flag():
            op = 'struct'
            path = ida_pro.tid_array(1)
            delta = ida_pro.sval_pointer()
            path_len = ida_bytes.get_stroff_path(path.cast(), delta.cast(), ea,
                                                 n)
            spath = []
            for i in range(path_len):
                sname = ida_struct.get_struc_name(path[i])
                spath.append(Unicoder.decode(sname))
            extra['delta'] = delta.value()
            extra['spath'] = spath
        elif flags == mask & ida_bytes.stkvar_flag():
            op = 'stkvar'
        else:
            return 0
        self._network.send_event(
            EventType.OPTYPECHANGED,
            ea=ea,
            n=n,
            op=Unicoder.decode(op),
            extra=extra,
        )
        return 0
示例#2
0
文件: hooks.py 项目: angr/binsync
    def renamed(self, ea, new_name, local_name):
        # #print("renamed(ea = %x, new_name = %s, local_name = %d)" % (ea, new_name, local_name))
        if ida_struct.is_member_id(ea) or ida_struct.get_struc(
                ea) or ida_enum.get_enum_name(ea):
            return 0

        ida_func = idaapi.get_func(ea)
        # global var renaming
        if ida_func is None:
            size = idaapi.get_item_size(ea)
            self.binsync_state_change(self.controller.push_artifact,
                                      GlobalVariable(ea, new_name, size=size))

        # function name renaming
        elif ida_func.start_ea == ea:
            # grab the name instead from ida
            name = idc.get_func_name(ida_func.start_ea)
            self.binsync_state_change(self.controller.push_artifact,
                                      FunctionHeader(name, ida_func.start_ea))

        return 0
示例#3
0
    def renamed(self, ea, new_name, local_name):
        print("renamed(ea = %x, new_name = %s, local_name = %d)" %
              (ea, new_name, local_name))
        if ida_struct.is_member_id(ea) or ida_struct.get_struc(
                ea) or ida_enum.get_enum_name(ea):
            # Drop hook to avoid duplicate since already handled by the following hooks:
            # - renaming_struc_member() -> sends 'StrucMemberRenamedEvent'
            # - renaming_struc() -> sends 'StrucRenamedEvent'
            # - renaming_enum() -> sends 'EnumRenamedEvent'
            return 0

        # confirm we are renaming a function
        ida_func = idaapi.get_func(ea)
        if ida_func is None:
            return 0

        # grab the name instead from ida
        name = idc.get_func_name(ida_func.start_ea)
        self.controller.make_controller_cmd(self.controller.push_function_name,
                                            ida_func.start_ea, name)

        return 0
示例#4
0
# https://github.com/csnover/ida-misc
#
# Sorts all the enums in a database in case-insensitive alphabetical order.

import ida_enum

enums = []

for i in range(0, ida_enum.get_enum_qty()):
    id = ida_enum.getn_enum(i)
    name = ida_enum.get_enum_name(id)
    enums.append((name, id))

enums.sort(key=lambda t: t[0].lower())

for i, t in enumerate(enums):
    ida_enum.set_enum_idx(t[1], i)
示例#5
0
 def deleting_enum(self, id):
     print("enum deleted")
     return 0
     enum_name = ida_enum.get_enum_name(id)
示例#6
0
文件: hooks.py 项目: angr/binsync
 def deleting_enum(self, id):
     name = ida_enum.get_enum_name(id)
     enum = Enum(name, {})
     self.binsync_state_change(self.controller.push_artifact, enum)
     return 0
示例#7
0
 def enum_cmt_changed(self, tid, repeatable_cmt):
     cmt = ida_enum.get_enum_cmt(tid, repeatable_cmt)
     emname = ida_enum.get_enum_name(tid)
     print("Detected an enum comment changed for 0x%x (%s): %s, %s" %
           (tid, emname, cmt, repeatable_cmt))
     return 0
示例#8
0
文件: hooks.py 项目: rigmar/IDArling
 def enum_bf_changed(self, id):
     bf_flag = 1 if ida_enum.is_bf(id) else 0
     ename = ida_enum.get_enum_name(id)
     self._send_packet(evt.EnumBfChangedEvent(ename, bf_flag))
     return 0
示例#9
0
 def enum_created(self, id):
     if not shared.PAUSE_HOOK:
         log("Enum created: {0}".format(id))
         pass_to_manager(CreateEnumEvent(ida_enum.get_enum_name(id), id))
     return ida_idp.IDB_Hooks.enum_created(self, id)
示例#10
0
文件: bipenum.py 项目: xcode2010/bip
 def _is_this_elt(cls, idelt):
     """
         Return true if ``idelt`` correspond to an enum_t.
     """
     return ida_enum.get_enum_name(idelt) is not None
示例#11
0
 def implement(self):
     enum_name = ida_enum.get_enum_name(self._id)
     value = ida_enum.get_enum_member_value(self._member_id)
     serial = ida_enum.get_enum_member_serial(self._member_id)
     bmask = ida_enum.get_enum_member_bmask(self._member_id)
     ida_enum.del_enum_member(enum_name, value, serial, bmask)
示例#12
0
 def enum_bf_changed(self, id):
     ename = ida_enum.get_enum_name(id)
     print("Detected a bf changed: 0x%x (%s)" % (id, ename))
     return 0
示例#13
0
 def deleting_enum(self, id):
     name = ida_enum.get_enum_name(id)
     print("Detected a enum deleted: 0x%x (%s)" % (id, name))
     return 0
示例#14
0
 def enum_created(self, enum):
     name = ida_enum.get_enum_name(enum)
     print("Detected a new enum created: 0x%x (%s)" % (enum, name))
     return 0
示例#15
0
文件: hooks.py 项目: rigmar/IDArling
 def enum_created(self, enum):
     name = ida_enum.get_enum_name(enum)
     self._send_packet(evt.EnumCreatedEvent(enum, name))
     return 0
示例#16
0
文件: hooks.py 项目: rigmar/IDArling
 def deleting_enum(self, id):
     self._send_packet(evt.EnumDeletedEvent(ida_enum.get_enum_name(id)))
     return 0
示例#17
0
 def deleting_enum(self, id):
     if not shared.PAUSE_HOOK:
         log("Enum deleted")
         pass_to_manager(DeleteEnumEvent(ida_enum.get_enum_name(id)))
     return ida_idp.IDB_Hooks.enum_deleted(self, id)
示例#18
0
文件: hooks.py 项目: rigmar/IDArling
 def enum_cmt_changed(self, tid, repeatable_cmt):
     cmt = ida_enum.get_enum_cmt(tid, repeatable_cmt)
     emname = ida_enum.get_enum_name(tid)
     self._send_packet(evt.EnumCmtChangedEvent(emname, cmt, repeatable_cmt))
     return 0
示例#19
0
文件: hooks.py 项目: angr/binsync
 def bs_enum_modified(self, enum):
     name = ida_enum.get_enum_name(enum)
     _enum = compat.enum(name)
     self.binsync_state_change(self.controller.push_artifact, _enum)