#pragma once #include #include #include #include #include namespace fuzzer { using coverage_functor = void(uint64_t address); enum class execution_result { success, error, }; struct executer { virtual ~executer() = default; virtual execution_result execute(std::span data, const std::function& coverage_handler) = 0; }; struct fuzzing_handler { virtual ~fuzzing_handler() = default; virtual std::unique_ptr make_executer() = 0; virtual bool stop() { return false; } }; void run(fuzzing_handler& handler, size_t concurrency = std::thread::hardware_concurrency()); }