20 for (uint8_t i = 0; i < num_of_mutation; i++) {
23 switch (mutation_config) {
25 mutate_vec<std::vector<FuzzInstruction>>(
42 if (fuzzer_data.
calldata.size() > 0) {
57 instruction_block.reserve(num_tags);
59 for (uint32_t i = 0; i < num_tags; i++) {
72 instruction_block.insert(instruction_block.end(), preamble.begin(), preamble.end());
void mutate_calldata_vec(std::vector< bb::avm2::FF > &calldata, std::mt19937_64 &rng)
T select(std::mt19937_64 &rng) const
constexpr ReturnOptionsMutationConfig BASIC_RETURN_OPTIONS_MUTATION_CONFIGURATION
constexpr uint8_t MAX_MUTATION_NUM
constexpr FuzzerDataMutationConfig BASIC_FUZZER_DATA_MUTATION_CONFIGURATION
@ ControlFlowCommandMutation
constexpr VecMutationConfig BASIC_VEC_MUTATION_CONFIGURATION
void mutate_control_flow_vec(std::vector< CFGInstruction > &control_flow_vec, std::mt19937_64 &rng)
FuzzerData generate_fuzzer_data(std::mt19937_64 &rng, const FuzzerContext &context)
void mutate_instruction_block(std::vector< FuzzInstruction > &instruction_block, std::mt19937_64 &rng, const FuzzerContext &context)
void add_default_instruction_block_if_empty(FuzzerData &fuzzer_data, std::mt19937_64 &rng, const FuzzerContext &context)
void mutate_fuzzer_data(FuzzerData &fuzzer_data, std::mt19937_64 &rng, const FuzzerContext &context)
std::vector< FuzzInstruction > generate_instruction_block(std::mt19937_64 &rng, const FuzzerContext &context)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
void mutate_return_options(ReturnOptions &return_options, std::mt19937_64 &rng, const ReturnOptionsMutationConfig &config)
describes the data which will be used for fuzzing Should contain instructions, calldata,...
ReturnOptions return_options
std::vector< bb::avm2::FF > calldata
std::vector< CFGInstruction > cfg_instructions
std::vector< std::vector< FuzzInstruction > > instruction_blocks
insert instruction block to the current block
uint16_t instruction_block_idx
MemoryTagWrapper value_tag