pub struct ForkserverExecutorBuilder<'a, SP> { /* private fields */ }
Expand description

The builder for ForkserverExecutor

Implementations§

source§

impl<'a, SP> ForkserverExecutorBuilder<'a, SP>

source

pub fn build<OT, S>( &mut self, observers: OT ) -> Result<ForkserverExecutor<OT, S, SP>, Error>

Builds ForkserverExecutor. This Forkserver will attempt to provide inputs over shared mem when shmem_provider is given. Else this forkserver will pass the input to the target via stdin in case no input file is specified. If debug_child is set, the child will print to stdout/stderr.

source

pub fn build_dynamic_map<A, MO, OT, S>( &mut self, map_observer: A, other_observers: OT ) -> Result<ForkserverExecutor<(A, OT), S, SP>, Error>
where MO: MapObserver + Truncate, A: Observer<S> + AsRef<MO> + AsMut<MO>, OT: ObserversTuple<S> + Prepend<MO, PreprendResult = OT>, S: UsesInput, S::Input: Input + HasTargetBytes, SP: ShMemProvider,

Builds ForkserverExecutor downsizing the coverage map to fit exaclty the AFL++ map size.

source

pub fn autotokens(self, tokens: &'a mut Tokens) -> Self

Use autodict?

source

pub fn timeout(self, timeout: Duration) -> Self

set the timeout for the executor

source

pub fn parse_afl_cmdline<IT, O>(self, args: IT) -> Self
where IT: IntoIterator<Item = O>, O: AsRef<OsStr>,

Parse afl style command line

Replaces @@ with the path to the input file generated by the fuzzer. If @@ is omitted, stdin is used to pass the test case instead.

Interprets the first argument as the path to the program as long as it is not set yet. You have to omit the program path in case you have set it already. Otherwise it will be interpreted as a regular argument, leading to probably unintended results.

source

pub fn program<O>(self, program: O) -> Self
where O: AsRef<OsStr>,

The harness

source

pub fn arg<O>(self, arg: O) -> Self
where O: AsRef<OsStr>,

Adds an argument to the harness’s commandline

You may want to use parse_afl_cmdline if you’re going to pass @@ represents the input file generated by the fuzzer (similar to the afl-fuzz command line).

source

pub fn args<IT, O>(self, args: IT) -> Self
where IT: IntoIterator<Item = O>, O: AsRef<OsStr>,

Adds arguments to the harness’s commandline

You may want to use parse_afl_cmdline if you’re going to pass @@ represents the input file generated by the fuzzer (similar to the afl-fuzz command line).

source

pub fn env<K, V>(self, key: K, val: V) -> Self
where K: AsRef<OsStr>, V: AsRef<OsStr>,

Adds an environmental var to the harness’s commandline

source

pub fn envs<IT, K, V>(self, vars: IT) -> Self
where IT: IntoIterator<Item = (K, V)>, K: AsRef<OsStr>, V: AsRef<OsStr>,

Adds environmental vars to the harness’s commandline

source

pub fn arg_input_file<P: AsRef<Path>>(self, path: P) -> Self

Place the input at this position and set the filename for the input.

Note: If you use this, you should ensure that there is only one instance using this file at any given time.

source

pub fn arg_input_file_std(self) -> Self

Place the input at this position and set the default filename for the input. The filename includes the PID of the fuzzer to ensure that no two fuzzers write to the same file

source

pub fn debug_child(self, debug_child: bool) -> Self

If debug_child is set, the child will print to stdout/stderr.

source

pub fn is_persistent(self, is_persistent: bool) -> Self

Call this if you want to run it under persistent mode; default is false

source

pub fn is_deferred_frksrv(self, is_deferred_frksrv: bool) -> Self

Call this if the harness uses deferred forkserver mode; default is false

source

pub fn coverage_map_size(self, size: usize) -> Self

Call this to set a defauult const coverage map size

source

pub fn kill_signal(self, kill_signal: Signal) -> Self

Call this to set a signal to be used to kill child processes after executions

source§

impl<'a> ForkserverExecutorBuilder<'a, UnixShMemProvider>

source

pub fn new() -> ForkserverExecutorBuilder<'a, UnixShMemProvider>

Creates a new AFL-style ForkserverExecutor with the given target, arguments and observers. This is the builder for ForkserverExecutor This Forkserver will attempt to provide inputs over shared mem when shmem_provider is given. Else this forkserver will pass the input to the target via stdin in case no input file is specified. If debug_child is set, the child will print to stdout/stderr.

source

pub fn shmem_provider<SP: ShMemProvider>( self, shmem_provider: &'a mut SP ) -> ForkserverExecutorBuilder<'a, SP>

Shmem provider for forkserver’s shared memory testcase feature.

Trait Implementations§

source§

impl<'a, SP: Debug> Debug for ForkserverExecutorBuilder<'a, SP>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'a> Default for ForkserverExecutorBuilder<'a, UnixShMemProvider>

source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

§

impl<'a, SP> Freeze for ForkserverExecutorBuilder<'a, SP>

§

impl<'a, SP> RefUnwindSafe for ForkserverExecutorBuilder<'a, SP>
where SP: RefUnwindSafe,

§

impl<'a, SP> Send for ForkserverExecutorBuilder<'a, SP>
where SP: Send,

§

impl<'a, SP> Sync for ForkserverExecutorBuilder<'a, SP>
where SP: Sync,

§

impl<'a, SP> Unpin for ForkserverExecutorBuilder<'a, SP>

§

impl<'a, SP> !UnwindSafe for ForkserverExecutorBuilder<'a, SP>

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> Conv for T

source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
source§

impl<T> FmtForward for T

source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, W> HasTypeWitness<W> for T
where W: MakeTypeWitness<Arg = T>, T: ?Sized,

source§

const WITNESS: W = W::MAKE

A constant of the type witness
source§

impl<T> Identity for T
where T: ?Sized,

§

type Type = T

The same type as Self, used to emulate type equality bounds (T == U) with associated type equality constraints (T: Identity<Type = U>).
source§

const TYPE_EQ: TypeEq<T, <T as Identity>::Type> = TypeEq::NEW

Proof that Self is the same type as Self::Type, provides methods for casting between Self and Self::Type.
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> Pipe for T
where T: ?Sized,

source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
source§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
source§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
source§

impl<Tail, T> Prepend<T> for Tail

§

type PreprendResult = Tail

The Resulting TupleList, of an Prepend::prepend() call, including the prepended entry.
source§

fn prepend(self, value: T) -> (T, <Tail as Prepend<T>>::PreprendResult)

Prepend a value to this tuple, returning a new tuple with prepended value.
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T> Tap for T

source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
source§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
source§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
source§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
source§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
source§

impl<T> TryConv for T

source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

source§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

impl<T> Ungil for T
where T: Send,