def generate_default_strategy_pool(): """Return a strategy pool representing a random selection of strategies for launcher to consider.""" pool = StrategyPool() # Decide whether to include radamsa, ml rnn, or no generator (mutually # exclusive). choose_generator(pool) # Decide whether or not to include remaining strategies. if engine_common.do_corpus_subset(): pool.add_strategy(strategy.CORPUS_SUBSET_STRATEGY) for value in [ strategy.DATAFLOW_TRACING_STRATEGY, strategy.FORK_STRATEGY, strategy.MUTATOR_PLUGIN_STRATEGY, strategy.RANDOM_MAX_LENGTH_STRATEGY, strategy.RECOMMENDED_DICTIONARY_STRATEGY, strategy.VALUE_PROFILE_STRATEGY, ]: if do_strategy(value): pool.add_strategy(value) logs.log("Strategy pool was generated according to default parameters. " "Chosen strategies: " + ", ".join(pool.strategy_names)) return pool
def __init__(self): self.use_corpus_subset = engine_common.do_corpus_subset() if self.use_corpus_subset: self.corpus_subset_size = engine_common.random_choice( engine_common.CORPUS_SUBSET_NUM_TESTCASES) self.fast_cal = strategies.FastCal.NOT_SET
def get_corpus_directories(main_corpus_directory, fuzzer_path, fuzzing_strategies, minijail_chroot=None): """Return a list of corpus directories to be passed to the fuzzer binary for fuzzing.""" corpus_directories = [] # Set up scratch directory for writing new units. new_testcases_directory = create_corpus_directory('new') corpus_directories.append(new_testcases_directory) # Check for seed corpus and add it into corpus directory. engine_common.unpack_seed_corpus_if_needed(fuzzer_path, main_corpus_directory) # Pick a few testcases from our corpus to use as the initial corpus. subset_size = engine_common.random_choice( engine_common.CORPUS_SUBSET_NUM_TESTCASES) if (engine_common.do_corpus_subset() and shell.get_directory_file_count(main_corpus_directory) > subset_size): # Copy |subset_size| testcases into 'subset' directory. corpus_subset_directory = create_corpus_directory('subset') copy_from_corpus(corpus_subset_directory, main_corpus_directory, subset_size) corpus_directories.append(corpus_subset_directory) fuzzing_strategies.append(strategy.CORPUS_SUBSET_STRATEGY + '_' + str(subset_size)) if minijail_chroot: bind_corpus_dirs(minijail_chroot, [main_corpus_directory]) else: # Regular fuzzing with the full main corpus directory. corpus_directories.append(main_corpus_directory) if minijail_chroot: bind_corpus_dirs(minijail_chroot, corpus_directories) return corpus_directories
def generate_default_strategy_pool(): """Return a strategy pool representing a random selection of strategies for launcher to consider.""" pool = StrategyPool() # Decide whether to include radamsa, ml rnn, or no generator (mutually # exclusive). choose_generator(pool) # Decide whether or not to include remaining strategies. if engine_common.do_corpus_subset(): pool.add_strategy(strategy.CORPUS_SUBSET_STRATEGY) if do_strategy(strategy.RANDOM_MAX_LENGTH_STRATEGY): pool.add_strategy(strategy.RANDOM_MAX_LENGTH_STRATEGY) if do_strategy(strategy.RECOMMENDED_DICTIONARY_STRATEGY): pool.add_strategy(strategy.RECOMMENDED_DICTIONARY_STRATEGY) if do_strategy(strategy.VALUE_PROFILE_STRATEGY): pool.add_strategy(strategy.VALUE_PROFILE_STRATEGY) if do_strategy(strategy.FORK_STRATEGY): pool.add_strategy(strategy.FORK_STRATEGY) if do_strategy(strategy.MUTATOR_PLUGIN_STRATEGY): pool.add_strategy(strategy.MUTATOR_PLUGIN_STRATEGY) return pool