28 context.register_contract_from_bytecode(function);
40 const char* simulator_path =
std::getenv(
"AVM_SIMULATOR_BIN");
41 if (simulator_path ==
nullptr) {
42 throw std::runtime_error(
"AVM_SIMULATOR_BIN is not set");
44 std::string simulator_path_str(simulator_path);
54 msgpack::unpack((
reinterpret_cast<const char*
>(
buffer)), size).get().convert(deserialized_data);
55 }
catch (
const std::exception& e) {
61 auto context = create_context_with_predefined_functions();
69 size_t serialized_fuzzer_data_size,
73 auto context = create_context_with_predefined_functions();
77 msgpack::unpack((
reinterpret_cast<const char*
>(serialized_fuzzer_data)), serialized_fuzzer_data_size)
79 .convert(deserialized_data);
80 }
catch (
const std::exception& e) {
84 auto [mutated_serialized_fuzzer_data, mutated_serialized_fuzzer_data_size] =
86 if (mutated_serialized_fuzzer_data_size > max_size) {
87 delete[] mutated_serialized_fuzzer_data;
91 memcpy(serialized_fuzzer_data, mutated_serialized_fuzzer_data, mutated_serialized_fuzzer_data_size);
92 delete[] mutated_serialized_fuzzer_data;
94 return mutated_serialized_fuzzer_data_size;
int LLVMFuzzerInitialize(int *, char ***)
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
::FuzzInstruction FuzzInstruction
SimulatorResult fuzz(const uint8_t *buffer, size_t size)
size_t LLVMFuzzerCustomMutator(uint8_t *serialized_fuzzer_data, size_t serialized_fuzzer_data_size, size_t max_size, unsigned int seed)
const std::vector< std::vector< uint8_t > > PREDEFINED_FUNCTIONS
static void initialize(std::string &simulator_path)
static FuzzerWorldStateManager * getInstance()
world_state::WorldStateRevision fork()
const std::vector< MemoryValue > data
uint8_t buffer[RANDOM_BUFFER_SIZE]
SimulatorResult fuzz_against_ts_simulator(FuzzerData &fuzzer_data, FuzzerContext &context)
fuzz CPP vs JS simulator with the given fuzzer data
FuzzerWorldStateManager * ws_mgr
std::pair< uint8_t *, size_t > msgpack_encode_buffer(auto &&obj, uint8_t *scratch_buf=nullptr, size_t scratch_size=0)
void mutate_fuzzer_data(FuzzerData &fuzzer_data, std::mt19937_64 &rng, const FuzzerContext &context)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
describes the data which will be used for fuzzing Should contain instructions, calldata,...