private Map<String, Address> findVirtualTableSymbols() throws CancelledException, PdbException {

		Map<String, Address> myAddressByVxtMangledName = new HashMap<>();

		PdbDebugInfo debugInfo = pdb.getDebugInfo();
		if (debugInfo == null) {
			return myAddressByVxtMangledName;
		}

		SymbolGroup symbolGroup = getSymbolGroup();
		if (symbolGroup == null) {
			return myAddressByVxtMangledName;
		}

		PublicSymbolInformation publicSymbolInformation = debugInfo.getPublicSymbolInformation();
		List<Long> offsets = publicSymbolInformation.getModifiedHashRecordSymbolOffsets();
		monitor.setMessage("PDB: Searching for VxT symbols...");
		monitor.initialize(offsets.size());

		MsSymbolIterator iter = symbolGroup.getSymbolIterator();
		for (long offset : offsets) {
			monitor.checkCancelled();
			iter.initGetByOffset(offset);
			if (!iter.hasNext()) {
				break;
			}
			AbstractMsSymbol symbol = iter.peek();
			if (symbol instanceof AbstractPublicMsSymbol pubSymbol) {
				String name = pubSymbol.getName();
				if (name.startsWith("??_7") || name.startsWith("??_8")) {
					Address address = getAddress(pubSymbol);
					if (!isInvalidAddress(address, name)) {
						myAddressByVxtMangledName.put(name, address);
					}
				}
			}
			monitor.incrementProgress(1);
		}
		return myAddressByVxtMangledName;
	}
Does some basic work based on the PDB and other parameters.  This work can be redone
 for each analysis phase (results should not differ)
@throws CancelledException upon user cancellation
@throws PdbException upon error in processing components
Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/pdbapplicator/DefaultPdbApplicator.java