private Address inferDesiredByteAddress(Address address, Address desiredAddress,
			Address byteAddress, Program program, Program desiredProgram) {

		long numBytesIntoCodeUnit = byteAddress.subtract(address);
		if (numBytesIntoCodeUnit == 0) {
			return desiredAddress;
		}
		if (numBytesIntoCodeUnit > 0) {
			CodeUnit codeUnit = program.getListing().getCodeUnitAt(address);
			CodeUnit desiredCodeUnit = desiredProgram.getListing().getCodeUnitAt(desiredAddress);
			if (codeUnit != null && desiredCodeUnit != null) {
				int desiredCodeUnitLength = desiredCodeUnit.getLength();
				if (numBytesIntoCodeUnit < desiredCodeUnitLength) {
					// Position at byte within code unit.
					return desiredAddress.add(numBytesIntoCodeUnit);
				}
				// Otherwise position at last byte of code unit.
				return desiredAddress.add(desiredCodeUnitLength - 1);
			}
		}
		return null;
	}
Infers a desired byte address based on the specified <code>byteAddress</code> as well as the
<code>address</code> and <code>desiredAddress</code> that were matched.

@param address matches up with the <code>desiredAddress</code> from the other function/data.
@param desiredAddress matches up with the <code>address</code> from the other function/data.
@param byteAddress the byte address that is associated with <code>address</code>
@param program the program for the <code>address</code> and <code>byteAddress</code>.
@param desiredProgram the program for the <code>desiredAddress</code> and
           <code>desiredByteAddress</code>.
@return the desired byte address that matches up with the indicated <code>byteAddress</code>
        or null if it can't be determined.
Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/listingpanel/ProgramLocationTranslator.java