@Override
		protected void process(Program program, TaskMonitor monitor) throws IOException {
			// NOTE: task monitor not used by DescriptionManager
			String md5string = program.getExecutableMD5();
			if ((md5string == null) || (md5string.length() < 10)) {
				Msg.error(this, "Could not get MD5 on file: " + program.getDomainFile().getName());
				return;
			}
			String basename = "sigs_" + md5string;
			File file = new File(outdirectory, basename);
			if ((!overwrite) && file.exists()) {
				Msg.warn(this,
					"Signature file already exists for: " + program.getDomainFile().getName());
				return;
			}
			GenSignatures gensig = new GenSignatures(true);
			try {
				gensig.setVectorFactory(vectorFactory);
				gensig.addExecutableCategories(info.execats);
				gensig.addFunctionTags(info.functionTags);
				gensig.addDateColumnName(info.dateColumnName);
				Msg.info(this, "Generating signatures for: " + program.getDomainFile().getName());
				String path = GenSignatures.getPathFromDomainFile(program);
				gensig.openProgram(program, null, null, null, repo, path);
				FunctionManager fman = program.getFunctionManager();
				Iterator<Function> iterator = fman.getFunctions(true);
				gensig.scanFunctions(iterator, fman.getFunctionCount(), null);
				DescriptionManager manager = gensig.getDescriptionManager();
				if (manager.numFunctions() == 0) {
					Msg.warn(this, program.getDomainFile().getName() +
						" contains no functions with signatures");
					return;
				}
				FileWriter fwrite = new FileWriter(file);
				manager.saveXml(fwrite);
				fwrite.close();
			}
			catch (DecompileException | LSHException e) {
				throw new IOException("Program signature generation failure: " + e.getMessage());
			}
		}
Exports information about a binary to a local folder in XML format.

@param resultFolder the folder where the results will be stored
@param query the query object containing the params of the query
@throws IOException if there's an error establishing the database connection
@throws LSHException if there's an error issuing the query
Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/ingest/BulkSignatures.java