@Override
	public void markup(Program program, MachHeader header, String source, TaskMonitor monitor,
			MessageLog log) throws CancelledException {

		Address symbolTableAddr = fileOffsetToAddress(program, header, symoff, nsyms);
		if (symbolTableAddr == null) {
			return;
		}
		Address stringTableAddr = fileOffsetToAddress(program, header, stroff, strsize);

		markupPlateComment(program, symbolTableAddr, source, "symbols");
		markupPlateComment(program, stringTableAddr, source, "strings");

		ReferenceManager referenceManager = program.getReferenceManager();
		try {
			for (int i = 0; i < nsyms; i++) {
				NList nlist = symbols.get(i);
				DataType dt = nlist.toDataType();
				Address nlistAddr = symbolTableAddr.add(i * dt.getLength());
				Data d = DataUtilities.createData(program, nlistAddr, dt, -1,
					DataUtilities.ClearDataMode.CHECK_FOR_SPACE);

				if (stringTableAddr != null && nlist.getStringTableIndex() != 0) {
					Address strAddr = stringTableAddr.add(nlist.getStringTableIndex());
					DataUtilities.createData(program, strAddr, STRING, -1,
						DataUtilities.ClearDataMode.CHECK_FOR_SPACE);
					Reference ref = referenceManager.addMemoryReference(d.getMinAddress(), strAddr,
						RefType.DATA, SourceType.IMPORTED, 0);
					referenceManager.setPrimary(ref, true);
				}
			}

		}
		catch (Exception e) {
			log.appendMsg(SymbolTableCommand.class.getSimpleName(),
				"Failed to markup: " + getContextualName(source, "symbols"));
		}
	}
Adds the given {@link List} of {@link NList}s to this symbol/string table, and adjusts the
affected symbol table load command fields appropriately

@param list The {@link List} of {@link NList}s to add
Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/macho/commands/SymbolTableCommand.java