@Override
	public void markup(Program program, boolean isBinary, TaskMonitor monitor, MessageLog log,
			NTHeader ntHeader) throws DuplicateNameException, CodeUnitInsertionException,
			IOException, MemoryAccessException {

		if (!metadata.hasParsedCorrectly()) {
			return;
		}

		metadata.markup(program, isBinary, monitor, log, ntHeader);

		if (entryPointToken > 0) { // DLL's won't have an entry point
			try {
				if ((flags &
					ImageCor20Flags.COMIMAGE_FLAGS_NATIVE_ENTRYPOINT) == ImageCor20Flags.COMIMAGE_FLAGS_NATIVE_ENTRYPOINT) {
					// Add new symbol for the native entry point
					program.getSymbolTable()
							.addExternalEntryPoint(program.getImageBase().add(entryPointToken));
				}
				else {
					// Add a new symbol for the .NET entry point
					CliStreamMetadata stream = (CliStreamMetadata) metadata.getMetadataRoot()
							.getStreamHeader(CliStreamMetadata.getName())
							.getStream();

					CliMethodDefRow row =
						(CliMethodDefRow) stream.getTable((entryPointToken & 0xff000000) >> 24)
								.getRow(entryPointToken & 0x00ffffff);

					program.getSymbolTable()
							.addExternalEntryPoint(program.getImageBase().add(row.RVA));

					entryPointVA = program.getImageBase().add(row.RVA);
				}
			}
			catch (Exception e) {
				log.appendException(e);
			}
		}
	}
Parses this header

@return True if parsing completed successfully; otherwise, false.
@throws IOException If there was an IO problem while parsing.
Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/pe/ImageCor20Header.java