private void markupStringTable(Address address, long tableBytesLength, TaskMonitor monitor) {

		MemoryBlock block = memory.getBlock(address);
		if (block == null || tableBytesLength <= 0) {
			return;
		}

		try {
			Address end = address.addNoWrap(tableBytesLength - 1);
			if (end.compareTo(block.getEnd()) > 0) {
				end = block.getEnd();
			}

			address = address.addNoWrap(1);
			while (!monitor.isCancelled() && address.compareTo(end) < 0) {
				int length = createString(address);
				monitor.incrementProgress(length);
				address = address.addNoWrap(length);
			}
		}
		catch (AddressOverflowException | CodeUnitInsertionException e) {
			return; // ignore end of space and code unit collision caused by previous markup
		}
		catch (Exception e) {
			log(e);
		}
	}
Add memory reference to dynamic table scalar value and return the referenced address
specified by the value
@param valueData defined {@link Data} within the dynamic table whose operand value should 
		be treated as an address offset and to which a memory reference should be applied.
@param definedMemoryOnly if true derived reference to-address must exist within a defined
		memory block. 
@param label optional label to be applied at reference to-address (may be null)
@return referenced to-address specified by the value
@throws InvalidInputException if an invalid label name is specified
Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/ElfProgramBuilder.java