@Override
	protected void build() throws Exception {

		try (SplitDyldCache splitDyldCache =
			new SplitDyldCache(provider, options.processLocalSymbols(), log, monitor)) {

			// Set image base
			setDyldCacheImageBase(splitDyldCache);

			// Set entry point
			setDyldCacheEntryPoint(splitDyldCache);

			// Setup memory
			// Check if local symbols are present
			boolean localSymbolsPresent = false;
			for (int i = 0; i < splitDyldCache.size(); i++) {
				DyldCacheHeader header = splitDyldCache.getDyldCacheHeader(i);
				ByteProvider bp = splitDyldCache.getProvider(i);
				String name = splitDyldCache.getName(i);

				processDyldCacheMemoryBlocks(header, name, bp);
				
				if (header.getLocalSymbolsInfo() != null) {
					localSymbolsPresent = true;
				}
			}

			// Perform additional DYLD processing
			for (int i = 0; i < splitDyldCache.size(); i++) {
				DyldCacheHeader header = splitDyldCache.getDyldCacheHeader(i);
				ByteProvider bp = splitDyldCache.getProvider(i);

				fixupSlidePointers(header);
				markupHeaders(header);
				markupBranchIslands(header, bp);
				createLocalSymbols(header);
				processDylibs(splitDyldCache, header, bp, localSymbolsPresent);
			}
		}
	}
Builds up a DYLD Cache {@link Program}.

@param program The {@link Program} to build up
@param provider The {@link ByteProvider} that contains the DYLD Cache's bytes
@param fileBytes Where the Mach-O's bytes came from
@param options Options from the {@link DyldCacheLoader}
@param log The log
@param monitor A cancelable task monitor
@throws Exception if a problem occurs
Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/DyldCacheProgramBuilder.java