private MemoryMatch findLast(AddressableByteSequence searchBytes, ByteSequence extra,
			TaskMonitor monitor) {

		MemoryMatch last = null;

		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)) {
				last = match;
			}
			if (monitor.isCancelled()) {
				return null;
			}
		}
		monitor.incrementProgress(searchBytes.getLength());
		return last;
	}
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