(self, cfg, irsb, irsb_addr, stmt_idx, data_addr, max_size)
Return the maximum number of bytes until a potential pointer or a potential sequence is found.

        :param angr.analyses.CFG cfg: The control flow graph.
        :param pyvex.IRSB irsb: The IRSB object.
        :param int irsb_addr: Address of the block.
        :param int stmt_idx: Statement ID.
        :param int data_addr: Address of the data in memory.
        :param int max_size: Maximum size possible.
        :return: A 2-tuple of data type and size.
        :rtype: tuple
Return the maximum number of bytes until a potential pointer or a potential sequence is found.
Return the maximum number of bytes until a potential pointer or a potential sequence is found .
def _unknown_data_size_handler(self, cfg, irsb, irsb_addr, stmt_idx, data_addr, max_size):  # pylint:disable=unused-argument
        """
        Return the maximum number of bytes until a potential pointer or a potential sequence is found.

        :param angr.analyses.CFG cfg: The control flow graph.
        :param pyvex.IRSB irsb: The IRSB object.
        :param int irsb_addr: Address of the block.
        :param int stmt_idx: Statement ID.
        :param int data_addr: Address of the data in memory.
        :param int max_size: Maximum size possible.
        :return: A 2-tuple of data type and size.
        :rtype: tuple
        """

        sequence_offset = None

        for offset in range(1, max_size):
            if self._is_sequence(cfg, data_addr + offset, 5):
                # a potential sequence is found
                sequence_offset = offset
                break

        if sequence_offset is not None:
            if self.project.arch.bits == 32:
                max_size = min(max_size, sequence_offset)
            elif self.project.arch.bits == 64:
                max_size = min(max_size, sequence_offset + 5)  # high 5 bytes might be all zeros...

        ptr_size = cfg.project.arch.bytes

        size = None

        for offset in range(1, max_size - ptr_size + 1):
            ptr = self.fast_memory_load(data_addr + offset, ptr_size, int, endness=cfg.project.arch.memory_endness)
            if self._is_pointer(cfg, ptr):
                size = offset
                break

        if size is not None:
            return "unknown", size
        elif sequence_offset is not None:
            return "unknown", sequence_offset
        else:
            return None, None
def _unknown_data_size_handler ( self , cfg , irsb , irsb_addr , stmt_idx , data_addr , max_size ) : # pylint:disable=unused-argument sequence_offset = None for offset in range ( 1 , max_size ) : if self . _is_sequence ( cfg , data_addr + offset , 5 ) : # a potential sequence is found sequence_offset = offset break if sequence_offset is not None : if self . project . arch . bits == 32 : max_size = min ( max_size , sequence_offset ) elif self . project . arch . bits == 64 : max_size = min ( max_size , sequence_offset + 5 ) # high 5 bytes might be all zeros... ptr_size = cfg . project . arch . bytes size = None for offset in range ( 1 , max_size - ptr_size + 1 ) : ptr = self . fast_memory_load ( data_addr + offset , ptr_size , int , endness = cfg . project . arch . memory_endness ) if self . _is_pointer ( cfg , ptr ) : size = offset break if size is not None : return "unknown" , size elif sequence_offset is not None : return "unknown" , sequence_offset else : return None , None