'Load memory objects from paged memory.
:param addr: Address to start loading.
:param num_bytes: Number of bytes to load.
:param bool ret_on_segv: True if you want load_bytes to return directly when a SIGSEV is triggered, otherwise
a SimSegfaultError will be raised.
:return: list of tuples of (addr, memory_object)
:rtype: tuple'

def load_objects(self, addr, num_bytes, ret_on_segv=False):

    result = []
    end = (addr + num_bytes)
    for page_addr in self._containing_pages(addr, end):
        try:
            page = self._get_page((page_addr / self._page_size))
        except KeyError:
            if self.allow_segv:
                if ret_on_segv:
                    break
                raise SimSegfaultError(addr, 'read-miss')
            else:
                continue
        if (self.allow_segv and (not (page.concrete_permissions & Page.PROT_READ))):
            if ret_on_segv:
                break
            raise SimSegfaultError(addr, 'non-readable')
        result.extend(page.load_slice(self.state, addr, end))
    return result
