mirror of
https://github.com/AFLplusplus/AFLplusplus.git
synced 2025-06-12 01:58:17 +00:00
80 lines
2.1 KiB
C
80 lines
2.1 KiB
C
#ifndef _AUTOMATON_PARSER_H
|
|
#define _AUTOMATON_PARSER_H
|
|
|
|
#define NUMINPUTS 500
|
|
#define MAX_PROGRAM_LENGTH 20000
|
|
#define MAX_PROGRAM_WALK_LENGTH 5000
|
|
#define MAX_TERMINAL_NUMS 5000
|
|
#define MAX_TERMINAL_LENGTH 1000
|
|
#define MAX_PROGRAM_NAME_LENGTH 5000
|
|
|
|
#include "gramfuzz.h"
|
|
|
|
// represents an edge in the FSA
|
|
struct terminal_meta {
|
|
|
|
int state_name;
|
|
int trigger_idx;
|
|
int dest;
|
|
|
|
};
|
|
|
|
// represents a set of edges
|
|
struct terminal_arr {
|
|
|
|
struct terminal_meta *start;
|
|
size_t len;
|
|
|
|
};
|
|
|
|
// essentially a string array
|
|
struct symbols_arr {
|
|
|
|
char **symbols_arr;
|
|
size_t len;
|
|
|
|
};
|
|
|
|
struct symbols_arr *symbols; // symbols contain all the symbols in the language
|
|
map_t pda_map; // a map that maps each symbol in the language to a set of edges
|
|
struct symbols_arr
|
|
* first_chars; // an array of first characters, only temperary array
|
|
map_t first_char_to_symbols_map; // a map that maps each first character to a
|
|
// set of symbols (the symbols are sorted in
|
|
// descending order)
|
|
|
|
// freeing terminal arrays
|
|
int free_terminal_arr(any_t placeholder, any_t item);
|
|
|
|
// return a map that maps each symbol in the language to a set of edges
|
|
// populate symbols_arr with all the symbols in the language
|
|
map_t create_pda_hashmap(state *pda, struct symbols_arr *symbols_arr);
|
|
|
|
// print the string array
|
|
void print_symbols_arr(struct symbols_arr *arr);
|
|
|
|
// free hashmap
|
|
// the function pointer contains function to free the values in the hashmap
|
|
void free_hashmap(map_t m, int (*f)(any_t, any_t));
|
|
|
|
// free string array
|
|
int free_array_of_chars(any_t placeholder, any_t item);
|
|
|
|
// free the pda
|
|
void free_pda(state *pda);
|
|
|
|
// create a string array
|
|
struct symbols_arr *create_array_of_chars();
|
|
|
|
map_t create_first_char_to_symbols_hashmap(struct symbols_arr *symbols,
|
|
struct symbols_arr *first_chars);
|
|
|
|
// return the automaton represented by the seed
|
|
Array *automaton_parser(const uint8_t *seed_fn);
|
|
|
|
int add_element_to_symbols_arr(struct symbols_arr *symbols_arr, char *symbol,
|
|
size_t symbol_len);
|
|
|
|
#endif
|
|
|