private boolean findAll(Accumulator<MemoryMatch> accumulator,
			AddressableByteSequence searchBytes, ByteSequence extra, TaskMonitor monitor) {

		if (monitor.isCancelled()) {
			return false;
		}

		ExtendedByteSequence searchSequence =
			new ExtendedByteSequence(searchBytes, extra, OVERLAP_SIZE);

		for (ByteMatch byteMatch : matcher.match(searchSequence)) {
			Address address = searchBytes.getAddress(byteMatch.start());
			byte[] bytes = searchSequence.getBytes(byteMatch.start(), byteMatch.length());
			MemoryMatch match = new MemoryMatch(address, bytes, matcher);
			if (filter.test(match)) {
				if (accumulator.size() >= searchLimit) {
					return false;
				}
				accumulator.add(match);
			}
			if (monitor.isCancelled()) {
				return false;
			}

		}
		// Reset the monitor message, since clients may change the message (such as the 
		// incremental table loader)
		monitor.setMessage("Searching...");
		monitor.incrementProgress(searchBytes.getLength());
		return true;
	}
Searches backwards starting at the given address until a match is found or
the beginning of the address set is reached. It does not currently wrap the search.
@param start the address to start searching
@param monitor the task monitor
@return the first match found or null if no match found.
Ghidra/Features/Base/src/main/java/ghidra/features/base/memsearch/searcher/MemorySearcher.java