@Override
	public void run(TaskMonitor monitor) throws CancelledException {
		execNonFunc = new AddressSet();
		AddressSetView executable = prog.getMemory().getExecuteSet();
		AddressSetView initialized = prog.getMemory().getLoadedAndInitializedAddressSet();
		execNonFunc = executable.intersect(initialized);
		monitor.initialize(prog.getFunctionManager().getFunctionCount());
		FunctionIterator fIter = prog.getFunctionManager().getFunctions(true);
		while (fIter.hasNext()) {
			monitor.checkCancelled();
			monitor.incrementProgress(1);
			Function func = fIter.next();
			execNonFunc = execNonFunc.subtract(func.getBody());
		}
		//remove small undefined ranges to avoid (for example) searching for
		//function starts in an address range of length 3 between two known
		//functions.  "small" is controlled by a plugin option.
		AddressSetView undefinedRanges =
			prog.getListing().getUndefinedRanges(execNonFunc, true, monitor);
		AddressSet toRemove = new AddressSet();
		AddressRangeIterator iter = undefinedRanges.getAddressRanges(true);
		while (iter.hasNext()) {
			AddressRange range = iter.next();
			if (range.getLength() <= minUndefinedRangeSize) {
				toRemove.add(range);
			}
		}
		execNonFunc = execNonFunc.subtract(toRemove);
	}
Creates a {@link Task} that creates a set of addresses to check for function starts.  The
{code minUndefinedRangeSize} parameter determines how large a run of undefined bytes must be
to be checked for function starts
@param prog source program
@param minUndefinedRangeSize minimum size of undefined range
Ghidra/Extensions/MachineLearning/src/main/java/ghidra/machinelearning/functionfinding/GetAddressesToClassifyTask.java