def __init__(self, size, offset, name=None): AbstractMember.__init__(self, offset) self.name = name if name else "gap_{0:X}".format(self.offset) if size == 1: self.tinfo = const.BYTE_TINFO else: array_data = idaapi.array_type_data_t() array_data.base = 0 array_data.elem_type = const.BYTE_TINFO array_data.nelems = size self.tinfo = idaapi.tinfo_t() self.tinfo.create_array(array_data)
def __init__(self, type): self.logger = logging.getLogger(__name__) self.type_info = type self.array_type_data = idaapi.array_type_data_t() self.element_type = None self.element_num = 0 self.element_size = 0 self.elements = [] # Extract array data self.get_array_data()
def create_padding_udt_member(offset, size): # type: (long, long) -> idaapi.udt_member_t """ Creates internal IDA structure with name gap_XXX and appropriate size and offset """ udt_member = idaapi.udt_member_t() udt_member.name = "gap_{0:X}".format(offset) udt_member.offset = offset udt_member.size = size if size == 1: udt_member.type = const.BYTE_TINFO else: array_data = idaapi.array_type_data_t() array_data.base = 0 array_data.elem_type = const.BYTE_TINFO array_data.nelems = size tmp_tinfo = idaapi.tinfo_t() tmp_tinfo.create_array(array_data) udt_member.type = tmp_tinfo return udt_member
def get_padding_member(offset, size): udt_member = idaapi.udt_member_t() if size == 1: udt_member.name = "gap_{0:X}".format(offset) udt_member.type = Const.BYTE_TINFO udt_member.size = Const.BYTE_TINFO.get_size() udt_member.offset = offset return udt_member array_data = idaapi.array_type_data_t() array_data.base = 0 array_data.elem_type = Const.BYTE_TINFO array_data.nelems = size tmp_tinfo = idaapi.tinfo_t() tmp_tinfo.create_array(array_data) udt_member.name = "gap_{0:X}".format(offset) udt_member.type = tmp_tinfo udt_member.size = size udt_member.offset = offset return udt_member
def create_padding_udt_member(offset, size): # type: (long, long) -> idaapi.udt_member_t """ Creates internal IDA structure with name gap_XXX and appropriate size and offset """ udt_member = idaapi.udt_member_t() udt_member.name = "gap_{0:X}".format(offset) udt_member.offset = offset udt_member.size = size if size == 1: udt_member.type = const.BYTE_TINFO else: if size < 1 or size > 0xffffffff: print( "HexRaysPyTools::core::helper::create_padding_udt_member: size is out of uint32 range (offset:{} size:{})" .format(offset, size)) array_data = idaapi.array_type_data_t() array_data.base = 0 array_data.elem_type = const.BYTE_TINFO array_data.nelems = size tmp_tinfo = idaapi.tinfo_t() tmp_tinfo.create_array(array_data) udt_member.type = tmp_tinfo return udt_member
def array_details(ti): if ti.is_array() is False: raise NotArrayError('ti is not an array') ai = idaapi.array_type_data_t() ti.get_array_details(ai) return ai