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
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