'_leak(addr, n) => str
Leak ``n`` consecutive bytes starting at ``addr``.
Returns:
A string of length ``n``, or :const:`None`.'

def _leak(self, addr, n, recurse=True):

    if ((not self.relative) and (addr < 0)):
        return None
    addresses = [(addr + i) for i in xrange(n)]
    for address in addresses:
        if (address in self.cache):
            continue
        data = None
        try:
            data = self.leak(address)
        except Exception as e:
            if self.reraise:
                raise
        if data:
            for (i, byte) in enumerate(data):
                self.cache[(address + i)] = byte
        elif recurse:
            for i in range(1, self.search_range):
                data = self._leak((address - i), (i + 1), False)
                if (address in self.cache):
                    break
            else:
                return None
    if (not all(((a in self.cache) for a in addresses))):
        return None
    return ''.join((self.cache[(addr + i)] for i in xrange(n)))
