private int calculateStartAddress() throws IOException {
		int numBlockPointers = -1;
		int dataOffset = cramfsInode.getOffsetAdjusted();
		int dataOffsetStart = dataOffset;
		boolean firstAddressFound = false;

		while (!firstAddressFound) {
			byte[] possibleZlibHeader =
				provider.readBytes(dataOffset, CramFsConstants.ZLIB_MAGIC_SIZE);
			if (Arrays.equals(possibleZlibHeader, ZLIB.ZLIB_COMPRESSION_DEFAULT) ||
				Arrays.equals(possibleZlibHeader, ZLIB.ZLIB_COMPRESSION_BEST) ||
				Arrays.equals(possibleZlibHeader, ZLIB.ZLIB_COMPRESSION_NO_LOW)) {
				blockPointerTable.add(dataOffset);
				firstAddressFound = true;
				return ((dataOffset - dataOffsetStart) / CramFsConstants.BLOCK_POINTER_SIZE) + 1;
			}
			dataOffset += 4;
		}
		return numBlockPointers;
	}
Calculates the start address of the data block using the 
block pointer table that precedes compressed data.
@return the number of block pointers associated with this data section.
@throws IOException if error occurs reading from the byte provider.
Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/cramfs/CramFsBlockReader.java