private AddressSet findPossibleStrings(Program program, AddressSetView addrSet, TaskMonitor monitor) throws CancelledException {
		AddressSet possibleStrSet = new AddressSet();
		Memory memory = program.getMemory();

		AddressIterator addrIter = addrSet.getAddresses(true);
		long maxBytes = addrSet.getNumAddresses();

		MemoryBufferImpl buffer = new MemoryBufferImpl(memory, addrSet.getMinAddress(),
			(int) (maxBytes > 1024 ? 1024 : maxBytes));

		while (addrIter.hasNext()) {
			Address start = addrIter.next();
			
			monitor.checkCancelled();

			// skip over anything that smells like a unicode string
			//
			int strLen = getWStrLen(buffer, start, (int) (maxBytes / 2));
			if (strLen > 4) {
				int numBytes = strLen * 2;
				addrIter = skipBytes(addrIter, addrSet, start, numBytes);
				possibleStrSet.addRange(start, start.add(numBytes));
				continue;
			}
		}
		return possibleStrSet;
	}
Check the table for consistency and return the number of good entries before a bad
entry is found.
<ul>
<li> check possible strings</li>
<li> pointers that jump all over memory</li>
<li> pointers to offcut instructions</li>
<li> allow offcut strings</li>
</ul>

@param tableEntry address table to check
@param program program
@return number of entries in table before hitting an inconsistent entry
@throws CancelledException if user cancels
Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/disassembler/AddressTableAnalyzer.java