def __call__(self): # FIXME: Hey-Rays bindings are broken # iflags = idaapi.user_iflags_new() # for (cl_ea, cl_op), f in self.iflags: # cl = idaapi.citem_locator_t(cl_ea, cl_op) # iflags.insert(cl, f) # idaapi.save_user_iflags(self.ea, iflags) idaapi.save_user_iflags(self.ea, idaapi.user_iflags_new()) refresh_pseudocode_view() cfunc = idaapi.decompile(self.ea) for (cl_ea, cl_op), f in self.iflags: cl = idaapi.citem_locator_t(cl_ea, cl_op) cfunc.set_user_iflags(cl, f) cfunc.save_user_iflags() refresh_pseudocode_view()
def _get_user_iflags(ea): user_iflags = idaapi.restore_user_iflags(ea) if user_iflags is None: user_iflags = idaapi.user_iflags_new() iflags = [] it = idaapi.user_iflags_begin(user_iflags) while it != idaapi.user_iflags_end(user_iflags): cl = idaapi.user_iflags_first(it) f = idaapi.user_iflags_second(it) # Temporary while Hex-Rays fix their API def read_type_sign(obj): import ctypes import struct buf = ctypes.string_at(id(obj), 4) return struct.unpack('I', buf)[0] f = read_type_sign(f) iflags.append(((cl.ea, cl.op), f)) it = idaapi.user_iflags_next(it) idaapi.user_iflags_free(user_iflags) return iflags