示例#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 项目: rigmar/IDArling
 def gather_enum_info(ea, n):
     id = ida_bytes.get_enum_id(ea, n)[0]
     serial = ida_enum.get_enum_idx(id)
     return id, serial