@Override
	public RelocationResult relocate(MachoRelocation relocation)
			throws MemoryAccessException, RelocationException {

		if (!relocation.requiresRelocation()) {
			return RelocationResult.SKIPPED;
		}
		
		RelocationInfo relocationInfo = relocation.getRelocationInfo();
		Address relocAddr = relocation.getRelocationAddress();
		Address targetAddr = relocation.getTargetAddress();

		int byteLength;
		switch (relocationInfo.getType()) {
			case GENERIC_RELOC_VANILLA:
				if (relocationInfo.isPcRelocated()) {
					byteLength = write(relocation, targetAddr.subtract(relocAddr) - 4);
				}
				else {
					byteLength = write(relocation, targetAddr.getOffset());
				}
				break;
				
			case GENERIC_RELOC_PAIR:           // should never see on its own here
			case GENERIC_RELOC_SECTDIFF:       // relocation not required (scattered)
			case GENERIC_RELOC_PB_LA_PTR:      // not seen yet
			case GENERIC_RELOC_LOCAL_SECTDIFF: // relocation not required (scattered)
			case GENERIC_RELOC_TLV:            // not seen yet
			default:
				return RelocationResult.UNSUPPORTED;
		}
		return new RelocationResult(Status.APPLIED, byteLength);
	}
A {@link MachoRelocationHandler} for x86 32-bit

@see <a href="https://opensource.apple.com/source/xnu/xnu-7195.81.3/EXTERNAL_HEADERS/mach-o/reloc.h.auto.html">mach-o/reloc.h</a>
Ghidra/Processors/x86/src/main/java/ghidra/app/util/bin/format/macho/relocation/X86_32_MachoRelocationHandler.java