extern int is_persistent; G_BEGIN_DECLS #define GUM_TYPE_FAKE_EVENT_SINK (gum_fake_event_sink_get_type()) G_DECLARE_FINAL_TYPE(GumFakeEventSink, gum_fake_event_sink, GUM, FAKE_EVENT_SINK, GObject) struct _GumFakeEventSink { GObject parent; GumEventType mask; }; GumEventSink *gum_fake_event_sink_new(void); void gum_fake_event_sink_reset(GumFakeEventSink *self); G_END_DECLS typedef struct { GumAddress base_address; guint64 code_start, code_end; } range_t; void instr_basic_block(GumStalkerIterator *iterator, GumStalkerOutput *output, gpointer user_data); #pragma once void afl_setup(void); void afl_start_forkserver(void); int __afl_persistent_loop(unsigned int max_cnt); inline static inline void afl_maybe_log(guint64 current_pc) { extern unsigned int afl_instr_rms; extern uint8_t * afl_area_ptr; static __thread guint64 previous_pc; current_pc = (current_pc >> 4) ^ (current_pc << 8); current_pc &= MAP_SIZE - 1; if (current_pc >= afl_instr_rms) return; afl_area_ptr[current_pc ^ previous_pc]++; previous_pc = current_pc >> 1; }