Trait Stage

Source
pub trait Stage<E, EM, S, Z> {
    // Required method
    fn perform(
        &mut self,
        fuzzer: &mut Z,
        executor: &mut E,
        state: &mut S,
        manager: &mut EM,
    ) -> Result<(), Error>;
}
Expand description

A stage is one step in the fuzzing process. Multiple stages will be scheduled one by one for each input.

Required Methods§

Source

fn perform( &mut self, fuzzer: &mut Z, executor: &mut E, state: &mut S, manager: &mut EM, ) -> Result<(), Error>

Run the stage.

If you want this stage to restart, then Before a call to perform, Restartable::should_restart will be (must be!) called. After returning (so non-target crash or timeout in a restarting case), Restartable::clear_progress gets called.

Implementors§

Source§

impl<C, E, EM, I, O, OT, S, Z> Stage<E, EM, S, Z> for CalibrationStage<C, E, I, O, OT, S>
where E: Executor<EM, I, S, Z> + HasObservers<Observers = OT>, EM: EventFirer<I, S>, O: MapObserver, C: AsRef<O>, for<'de> <O as MapObserver>::Entry: Serialize + Deserialize<'de> + 'static + Default + Debug + Bounded, OT: ObserversTuple<I, S>, S: HasCorpus<I> + HasMetadata + HasNamedMetadata + HasExecutions + HasCurrentTestcase<I> + HasCurrentCorpusId, Z: Evaluator<E, EM, I, S>, I: Input,

Source§

impl<C, E, EM, I, O, S, Z> Stage<E, EM, S, Z> for AflStatsStage<C, E, EM, I, O, S, Z>

Source§

impl<C, E, EM, I, O, S, Z> Stage<E, EM, S, Z> for ColorizationStage<C, E, EM, I, O, S, Z>

Source§

impl<C, E, EM, O, S, Z> Stage<E, EM, S, Z> for GeneralizationStage<C, EM, BytesInput, O, E::Observers, S, Z>

Source§

impl<CB1, CB2, E, EM, I, S, P, Z> Stage<E, EM, S, Z> for DumpToDiskStage<CB1, CB2, EM, I, S, Z>
where CB1: FnMut(&Testcase<I>, &S) -> Vec<u8>, CB2: FnMut(&Testcase<I>, &CorpusId) -> P, S: HasCorpus<I> + HasSolutions<I> + HasRand + HasMetadata, P: AsRef<Path>,

Source§

impl<CB, E, EM, I, S, Z> Stage<E, EM, S, Z> for SyncFromDiskStage<CB, E, EM, I, S, Z>

Source§

impl<CB, E, EM, S, Z> Stage<E, EM, S, Z> for ClosureStage<CB, E, EM, Z>

Source§

impl<CB, E, EM, ST1, ST2, S, Z> Stage<E, EM, S, Z> for IfElseStage<CB, E, EM, ST1, ST2, S, Z>
where CB: FnMut(&mut Z, &mut E, &mut S, &mut EM) -> Result<bool, Error>, ST1: StagesTuple<E, EM, S, Z>, ST2: StagesTuple<E, EM, S, Z>, S: HasNestedStage,

Source§

impl<CB, E, EM, ST, S, Z> Stage<E, EM, S, Z> for IfStage<CB, E, EM, ST, S, Z>
where CB: FnMut(&mut Z, &mut E, &mut S, &mut EM) -> Result<bool, Error>, ST: StagesTuple<E, EM, S, Z>, S: HasNestedStage,

Source§

impl<CB, E, EM, ST, S, Z> Stage<E, EM, S, Z> for WhileStage<CB, E, EM, ST, S, Z>
where CB: FnMut(&mut Z, &mut E, &mut S, &mut EM) -> Result<bool, Error>, ST: StagesTuple<E, EM, S, Z>, S: HasNestedStage,

Source§

impl<CS, E, EM, I, OT, PS, S, Z> Stage<E, EM, S, Z> for PushStageAdapter<CS, EM, I, OT, PS, Z>
where CS: Scheduler<I, S>, S: HasExecutions + HasRand + HasCorpus<I> + HasLastReportTime + HasCurrentCorpusId + HasNamedMetadata + HasMetadata, E: Executor<EM, I, S, Z> + HasObservers<Observers = OT>, EM: EventFirer<I, S> + EventRestarter<S> + HasEventManagerId + ProgressReporter<S>, OT: ObserversTuple<I, S>, PS: PushStage<EM, I, OT, S, Z>, Z: ExecutesInput<E, EM, I, S> + ExecutionProcessor<EM, I, OT, S> + EvaluatorObservers<E, EM, I, OT> + HasScheduler<I, S>,

Source§

impl<E, EM, F, FF, I, M, S, Z> Stage<E, EM, S, Z> for StdTMinMutationalStage<E, EM, F, FF, I, M, S, Z>

Source§

impl<E, EM, G, I, S, Z> Stage<E, EM, S, Z> for GenStage<G, I, S, Z>
where G: Generator<I, S>, S: HasRand, Z: Evaluator<E, EM, I, S>,

Source§

impl<E, EM, I1, I2, M, S, Z> Stage<E, EM, S, Z> for StdMutationalStage<E, EM, I1, I2, M, S, Z>

Source§

impl<E, EM, I, IC, ICB, DI, S, SHM, SP, Z> Stage<E, EM, S, Z> for SyncFromBrokerStage<I, IC, ICB, S, SHM, SP>
where DI: Input, EM: EventFirer<I, S>, E: HasObservers + Executor<EM, I, S, Z>, for<'a> E::Observers: Deserialize<'a>, I: Input + Clone, IC: InputConverter<From = I, To = DI>, ICB: InputConverter<From = DI, To = I>, S: HasExecutions + HasRand + HasMetadata + HasSolutions<I> + HasCurrentTestcase<I> + Stoppable + MaybeHasClientPerfMonitor, SHM: ShMem, SP: ShMemProvider<ShMem = SHM>, Z: EvaluatorObservers<E, EM, I, S> + ExecutionProcessor<EM, I, E::Observers, S> + HasObjective,

Source§

impl<E, EM, I, M, S, Z> Stage<E, EM, S, Z> for MultiMutationalStage<E, EM, I, M, S, Z>

Source§

impl<E, EM, I, M, S, Z> Stage<E, EM, S, Z> for TuneableMutationalStage<E, EM, I, M, S, Z>

Source§

impl<E, EM, I, S, Z> Stage<E, EM, S, Z> for SimpleConcolicMutationalStage<I, Z>

Source§

impl<E, EM, I, S, Z> Stage<E, EM, S, Z> for ReplayStage<I>
where S: HasCorpus<I> + HasSolutions<I> + HasMetadata, Z: Evaluator<E, EM, I, S>, I: Clone,

Source§

impl<E, EM, I, S, Z> Stage<E, EM, S, Z> for VerifyTimeoutsStage<E, I, S>
where E::Observers: ObserversTuple<I, S>, E: Executor<EM, I, S, Z> + HasObservers + HasTimeout, Z: Evaluator<E, EM, I, S>, S: HasMetadata, I: Debug + Serialize + DeserializeOwned + Default + 'static + Clone,

Source§

impl<E, EM, I, SOT, S, Z> Stage<ShadowExecutor<E, I, S, SOT>, EM, S, Z> for ShadowTracingStage<E, EM, I, SOT, S, Z>

Source§

impl<E, EM, I, TE, S, Z> Stage<E, EM, S, Z> for ConcolicTracingStage<'_, EM, I, TE, S, Z>

Source§

impl<E, EM, I, TE, S, Z> Stage<E, EM, S, Z> for TracingStage<EM, I, TE, S, Z>

Source§

impl<E, EM, S, Z> Stage<E, EM, S, Z> for NopStage

Source§

impl<E, EM, S, Z> Stage<E, EM, S, Z> for UnicodeIdentificationStage<BytesInput, S>

Source§

impl<E, EM, ST, S, Z> Stage<E, EM, S, Z> for OptionalStage<E, EM, ST, S, Z>
where ST: StagesTuple<E, EM, S, Z>, S: HasNestedStage,

Source§

impl<E, F, EM, I, M, S, Z> Stage<E, EM, S, Z> for PowerMutationalStage<E, F, EM, I, M, S, Z>

Source§

impl<T1, T2, E, EM, S, Z> Stage<E, EM, S, Z> for DynamicStage<T1, T2>
where T1: Stage<E, EM, S, Z>, T2: Stage<E, EM, S, Z>,

Source§

impl<T, E, M, Z, S, ST> Stage<E, M, S, Z> for TimeTrackingStageWrapper<T, S, ST>
where S: HasMetadata, ST: Stage<E, M, S, Z>, T: SerdeAny + From<Duration>,