private void createBaseClassDescriptors(Address address, int numBaseClasses,
			Namespace classNamespace) throws CancelledException, MemoryAccessException,
			AddressOutOfBoundsException, Exception {

		for (int i = 0; i < numBaseClasses; i++) {

			monitor.checkCancelled();

			Address baseClassDescriptorAddress = getReferencedAddress(address.add(i * 4));

			Data baseClassDescriptor = getDataAt(baseClassDescriptorAddress);
			if (baseClassDescriptor == null || !baseClassDescriptor.getDataType()
					.getName()
					.equals(
						RTTI_BASE_CLASS_DESCRIPTOR_DATA_NAME)) {

				int num1 = getInt(baseClassDescriptorAddress.add(8));
				int num2 = getInt(baseClassDescriptorAddress.add(12));
				int num3 = getInt(baseClassDescriptorAddress.add(16));
				int num4 = getInt(baseClassDescriptorAddress.add(20));

				baseClassDescriptor = createBaseClassDescriptor(baseClassDescriptorAddress);
				if (baseClassDescriptor != null) {
					symbolTable.createLabel(
						baseClassDescriptorAddress, RTTI_BASE_CLASS_DESCRIPTOR_LABEL + "_at_(" +
							num1 + "," + num2 + "," + num3 + "," + num4 + ")",
						classNamespace, SourceType.ANALYSIS);
				}
				else {
					println(
						"Failed to create a baseClassDescArray structure at " + address.toString());
				}
			}
		}
	}
Method to apply missing RTTI Base Class Descriptor structures and symbols  
@param address address to apply the missing structure and symbol
@param numBaseClasses number of base classes in the array pointing to BaseClassDescriptors
@param classNamespace name of the class
@throws AddressOutOfBoundsException if try clear listing at address out of bounds
@throws MemoryAccessException  if cannot access memory
@throws CancelledException if cancelled 
@throws Exception if issue making data
Ghidra/Features/MicrosoftCodeAnalyzer/ghidra_scripts/FixUpRttiAnalysisScript.java