@PcodeUserop
	public byte[] print_utf8(@OpExecutor PcodeExecutor<byte[]> executor, byte[] start) {
		PcodeExecutorState<byte[]> state = executor.getState();
		long offset = Utils.bytesToLong(start, start.length, language.isBigEndian());
		long end = offset;
		Reason reason = executor.getReason();
		while (state.getVar(space, end, 1, true, reason)[0] != 0) {
			end++;
		}
		if (end == offset) {
			script.println("");
			return Utils.longToBytes(0, Long.BYTES, language.isBigEndian());
		}
		byte[] bytes = state.getVar(space, offset, (int) (end - offset), true, reason);
		String str = new String(bytes, UTF8);
		script.println(str);
		return Utils.longToBytes(end - offset, Long.BYTES, language.isBigEndian());
	}
Treats the input as an offset to a C-style string and prints it to the console

<p>
Because we want to dereference start, we will need access to the emulator's state, so we
employ the {@link OpState} annotation. {@code start} takes the one input we expect. Because
its type is the value type rather than {@link Varnode}, we will get the input's value.
Similarly, we can just return the resulting value, and the emulator will place that into the
output variable for us.

@param state the calling thread's state
@param start the offset of the first character
@return the length of the string in bytes
Ghidra/Features/SystemEmulation/ghidra_scripts/DemoPcodeUseropLibrary.java