private static List<SegmentInfo> init(Address imageBase, long correction,
				List<PeCoffSectionMsSymbol> peCoffSectionSymbols) {
			List<SegmentInfo> segments = new ArrayList<>();

			// One last check to see if we should apply the correction.  If the original image
			// base is greater than any of the addresses here, then the addresses cannot be
			// Virtual Addresses, but instead Relative Virtual Addresses.  So set correction back
			// to zero (if not already zero).
			for (PeCoffSectionMsSymbol symbol : peCoffSectionSymbols) {
				long rva = symbol.getRva();
				if (rva != 0 && rva < correction) {
					correction = 0L;
					break;
				}
			}

			for (PeCoffSectionMsSymbol symbol : peCoffSectionSymbols) {
				int offset = symbol.getRva();
				if (offset != 0) {
					offset -= correction;
				}
				SegmentInfo segment = new SegmentInfo(offset, symbol.getLength());
				segments.add(segment);
			}
			return segments;
		}
Clean up possibly incomplete segment information, by synthesizing missing offset data.
@param segments segments to correct
@param firstSectionOffset "known" first section offset
@param imageAlign section alignment
@return new synthesized segment info with synthesized offsets
Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/pdbapplicator/PdbAddressCalculator.java