LLVM  3.7.0
Public Member Functions | Protected Member Functions | List of all members
fuzzer::UserSuppliedFuzzer Class Referenceabstract

An abstract class that allows to use user-supplied mutators with libFuzzer. More...

#include <FuzzerInterface.h>

Inheritance diagram for fuzzer::UserSuppliedFuzzer:
[legend]

Public Member Functions

virtual void TargetFunction (const uint8_t *Data, size_t Size)=0
 Executes the target function on 'Size' bytes of 'Data'. More...
 
virtual size_t Mutate (uint8_t *Data, size_t Size, size_t MaxSize)
 Mutates 'Size' bytes of data in 'Data' inplace into up to 'MaxSize' bytes, returns the new size of the data, which should be positive. More...
 
virtual size_t CrossOver (const uint8_t *Data1, size_t Size1, const uint8_t *Data2, size_t Size2, uint8_t *Out, size_t MaxOutSize)
 Crosses 'Data1' and 'Data2', writes up to 'MaxOutSize' bytes into Out, returns the number of bytes written, which should be positive. More...
 
virtual ~UserSuppliedFuzzer ()
 

Protected Member Functions

size_t BasicMutate (uint8_t *Data, size_t Size, size_t MaxSize)
 These can be called internally by Mutate and CrossOver. More...
 
size_t BasicCrossOver (const uint8_t *Data1, size_t Size1, const uint8_t *Data2, size_t Size2, uint8_t *Out, size_t MaxOutSize)
 

Detailed Description

An abstract class that allows to use user-supplied mutators with libFuzzer.

Usage:

#

public:
// Must define the target function.
void TargetFunction(...) { ... }
// Optionally define the mutator.
size_t Mutate(...) { ... }
// Optionally define the CrossOver method.
size_t CrossOver(...) { ... }
};
int main(int argc, char **argv) {
fuzzer::FuzzerDriver(argc, argv, F);
}
#

Definition at line 67 of file FuzzerInterface.h.

Constructor & Destructor Documentation

virtual fuzzer::UserSuppliedFuzzer::~UserSuppliedFuzzer ( )
inlinevirtual

Definition at line 83 of file FuzzerInterface.h.

Member Function Documentation

size_t fuzzer::UserSuppliedFuzzer::BasicCrossOver ( const uint8_t *  Data1,
size_t  Size1,
const uint8_t *  Data2,
size_t  Size2,
uint8_t *  Out,
size_t  MaxOutSize 
)
protected

Definition at line 21 of file FuzzerInterface.cpp.

References fuzzer::CrossOver().

Referenced by CrossOver().

size_t fuzzer::UserSuppliedFuzzer::BasicMutate ( uint8_t *  Data,
size_t  Size,
size_t  MaxSize 
)
protected

These can be called internally by Mutate and CrossOver.

Definition at line 17 of file FuzzerInterface.cpp.

References fuzzer::Mutate().

Referenced by MyFuzzer::Mutate(), and Mutate().

virtual size_t fuzzer::UserSuppliedFuzzer::CrossOver ( const uint8_t *  Data1,
size_t  Size1,
const uint8_t *  Data2,
size_t  Size2,
uint8_t *  Out,
size_t  MaxOutSize 
)
inlinevirtual

Crosses 'Data1' and 'Data2', writes up to 'MaxOutSize' bytes into Out, returns the number of bytes written, which should be positive.

Definition at line 78 of file FuzzerInterface.h.

References BasicCrossOver().

Referenced by fuzzer::Fuzzer::Loop().

virtual size_t fuzzer::UserSuppliedFuzzer::Mutate ( uint8_t *  Data,
size_t  Size,
size_t  MaxSize 
)
inlinevirtual

Mutates 'Size' bytes of data in 'Data' inplace into up to 'MaxSize' bytes, returns the new size of the data, which should be positive.

Reimplemented in MyFuzzer.

Definition at line 73 of file FuzzerInterface.h.

References BasicMutate().

virtual void fuzzer::UserSuppliedFuzzer::TargetFunction ( const uint8_t *  Data,
size_t  Size 
)
pure virtual

Executes the target function on 'Size' bytes of 'Data'.

Implemented in fuzzer::SimpleUserSuppliedFuzzer, and MyFuzzer.


The documentation for this class was generated from the following files: