16 #ifndef LLVM_FUZZER_INTERFACE_H
17 #define LLVM_FUZZER_INTERFACE_H
73 virtual size_t Mutate(uint8_t *Data,
size_t Size,
size_t MaxSize) {
78 virtual size_t CrossOver(
const uint8_t *Data1,
size_t Size1,
79 const uint8_t *Data2,
size_t Size2,
80 uint8_t *Out,
size_t MaxOutSize) {
81 return BasicCrossOver(Data1, Size1, Data2, Size2, Out, MaxOutSize);
87 size_t BasicMutate(uint8_t *Data,
size_t Size,
size_t MaxSize);
89 const uint8_t *Data2,
size_t Size2,
90 uint8_t *Out,
size_t MaxOutSize);
94 int FuzzerDriver(
int argc,
char **argv, UserSuppliedFuzzer &USF);
98 #endif // LLVM_FUZZER_INTERFACE_H
int FuzzerDriver(int argc, char **argv, UserCallback Callback)
Simple C-like interface with a single user-supplied callback.
size_t BasicCrossOver(const uint8_t *Data1, size_t Size1, const uint8_t *Data2, size_t Size2, uint8_t *Out, size_t MaxOutSize)
void(* UserCallback)(const uint8_t *Data, size_t Size)
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 wr...
virtual ~UserSuppliedFuzzer()
size_t BasicMutate(uint8_t *Data, size_t Size, size_t MaxSize)
These can be called internally by Mutate and CrossOver.
An abstract class that allows to use user-supplied mutators with libFuzzer.
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 th...
virtual void TargetFunction(const uint8_t *Data, size_t Size)=0
Executes the target function on 'Size' bytes of 'Data'.