@Override
	public byte [] readBytes( long index, long length ) throws IOException {
		for ( int i = 0 ; i < programs.length ; ++i ) {
			try {
				byte [] bytes = new byte[ (int) length ];
				int nRead = programs[ i ].getMemory( ).getBytes( baseAddresses[ i ].add( index ), bytes );
				if ( nRead != length ) {
					throw new IOException( "Unable to read " + length + " bytes at index " + index );
				}
				return bytes;
			}
			catch (Exception e) {
			}
		}
		throw new IOException( "Unable to read " + length + " bytes at index " + index );
	}
TODO
Check to make sure programs are disjoint and contiguous memory spaces.
Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/ext4/MultiProgramMemoryByteProvider.java