diff options
author | van Hauser <vh@thc.org> | 2024-02-08 10:29:33 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-08 10:29:33 +0100 |
commit | 42c663e7c76bd3abee2c6a84dd689bcfea3f59dc (patch) | |
tree | 4cd6a72df75e30763c9868aa8e8e9580a8a4fa5f /include/afl-record-compat.h | |
parent | e0e8645d6c7ecd96815939e19ec75bb8e2bd37df (diff) | |
parent | 956fa95d77ac3cbc43cd44b56bffc605e2a2090e (diff) | |
download | afl++-42c663e7c76bd3abee2c6a84dd689bcfea3f59dc.tar.gz |
Merge pull request #1965 from CodeLinaro/stateful
replay mode support
Diffstat (limited to 'include/afl-record-compat.h')
-rw-r--r-- | include/afl-record-compat.h | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/include/afl-record-compat.h b/include/afl-record-compat.h new file mode 100644 index 00000000..2c79595d --- /dev/null +++ b/include/afl-record-compat.h @@ -0,0 +1,67 @@ +#ifndef _HAVE_AFL_COMPAT_H +#define _HAVE_AFL_COMPAT_H + +#include <afl-persistent-replay.h> + +#define FUZZ_BUF_SIZE 1024000 + +// extern ssize_t read(int fildes, void *buf, size_t nbyte); + +// extern int __afl_persistent_loop(unsigned int max_cnt); +// extern unsigned char fuzz_buf[]; + +#ifndef __AFL_HAVE_MANUAL_CONTROL + #define __AFL_HAVE_MANUAL_CONTROL +#endif + +#define __AFL_FUZZ_TESTCASE_LEN (read(0, fuzz_buf, FUZZ_BUF_SIZE)) +#define __AFL_FUZZ_TESTCASE_BUF fuzz_buf +#define __AFL_FUZZ_INIT() void sync(void); +#define __AFL_INIT() sync() +#define __AFL_LOOP(x) __afl_persistent_loop(x) + +unsigned char fuzz_buf[FUZZ_BUF_SIZE]; + +int __afl_persistent_loop(unsigned int max_cnt) { + + static unsigned int cycle_cnt = 1; + static unsigned short int inited = 0; + char tcase[PATH_MAX]; + + if (is_replay_record) { + + if (!inited) { + + cycle_cnt = replay_record_cnt; + inited = 1; + + } + + snprintf(tcase, PATH_MAX, "%s/%s", + replay_record_dir ? replay_record_dir : "./", + record_list[replay_record_cnt - cycle_cnt]->d_name); + +#ifdef AFL_PERSISTENT_REPLAY_ARGPARSE + if (record_arg) { + + *record_arg = tcase; + + } else + +#endif // AFL_PERSISTENT_REPLAY_ARGPARSE + { + + int fd = open(tcase, O_RDONLY); + dup2(fd, 0); + close(fd); + + } + + } + + return --cycle_cnt; + +} + +#endif // _HAVE_AFL_COMPAT_H + |