public static List<Long> findPrelinkMachoHeaderOffsets(ByteProvider provider,
			TaskMonitor monitor) throws IOException {
		monitor.setMessage("Finding PRELINK Mach-O headers...");
		monitor.initialize((int) provider.length());

		List<Long> list = new ArrayList<>(); // This list must maintain ordering...don't sort it		
		for (long offset = 0; offset < provider.length() - 4; offset += 8) {
			if (monitor.isCancelled()) {
				break;
			}
			monitor.setProgress((int) offset);

			if (getMachoLoadSpec(provider, offset) != null) {
				if (offset > 0) {
					// Don't put first "System" Mach-O in list
					list.add(offset);
				}
			}
			else if (offset == 0) {
				// if it doesn't start with a Mach-O, just quit
				break;
			}
		}
		return list;
	}
Scans the provider looking for PRELINK Mach-O headers.  
<p>
NOTE: The "System" Mach-O at offset 0 is not considered a PRELINK Mach-O.
<p>
NOTE: We used to scan on 0x1000, and then 0x10 byte boundaries.  Now iOS 12 seems to 
put them on 0x8-byte boundaries.

@param provider The provider to scan.
@param monitor A monitor.
@return A list of provider offsets where PRELINK Mach-O headers start (not including the
  "System" Mach-O at offset 0).
@throws IOException If there was an IO-related issue searching for PRELINK Mach-O headers.
Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/MachoPrelinkUtils.java