def set_ida_struct(struct: Struct, controller) -> bool: # first, delete any struct by the same name if it exists sid = ida_struct.get_struc_id(struct.name) if sid != 0xffffffffffffffff: sptr = ida_struct.get_struc(sid) ida_struct.del_struc(sptr) # now make a struct header ida_struct.add_struc(ida_idaapi.BADADDR, struct.name, False) sid = ida_struct.get_struc_id(struct.name) sptr = ida_struct.get_struc(sid) # expand the struct to the desired size # XXX: do not increment API here, why? Not sure, but you cant do it here. ida_struct.expand_struc(sptr, 0, struct.size) # add every member of the struct for off, member in struct.struct_members.items(): # convert to ida's flag system mflag = convert_size_to_flag(member.size) # create the new member ida_struct.add_struc_member( sptr, member.member_name, member.offset, mflag, None, member.size, ) return True
def __call__(self): struc = ida_struct.get_struc_id(Event.encode(self.sname)) sptr = ida_struct.get_struc(struc) ida_struct.expand_struc(sptr, self.offset, self.delta)