private int putBytes(long offset, byte[] b, int off, int len)
			throws IndexOutOfBoundsException, MemoryAccessException {
		if (off < 0 || off + len > b.length) {
			throw new IndexOutOfBoundsException();
		}
		if (offset < 0 || offset >= length) {
			throw new IndexOutOfBoundsException();
		}

		len = (int) Math.min(len, length - offset);

		int totalCopied = 0;
		try {
			while (totalCopied < len) {
				SubMemoryBlock subBlock = getSubBlock(offset + totalCopied);
				totalCopied += subBlock.putBytes(offset + totalCopied, b, off + totalCopied,
					len - totalCopied);
			}
		}
		catch (IOException e) {
			checkValid();
			memMap.dbError(e);
		}

		return totalCopied;
	}
Get collection of blocks which map onto this block.

@return collection of blocks which map onto this block or null if none identified
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryBlockDB.java