'Return the memory objects overlapping with the provided slice.
:param start: the start address
:param end: the end address (non-inclusive)
:returns: tuples of (starting_addr, memory_object)'

def load_slice(self, state, start, end):

    items = []
    if ((start > (self._page_addr + self._page_size)) or (end < self._page_addr)):
        l.warning('Calling    load_slice    on    the    wrong    page.')
        return items
    for addr in range(max(start, self._page_addr), min(end, (self._page_addr + self._page_size))):
        i = (addr - self._page_addr)
        mo = self._storage[i]
        if (mo is None):
            mo = self._sinkhole
        if ((mo is not None) and ((not items) or (items[(-1)][1] is not mo))):
            items.append((addr, mo))
    return items
