############################################################################### # https://en.wikipedia.org/wiki/American_fuzzy_lop_(fuzzer) # lottery.c from https://events.static.linuxfound.org/sites/events/files/slides/AFL%20filesystem%20fuzzing%2C%20Vault%202016_0.pdf ############################################################################### .ONESHELL: EXE = $(basename $(SRC)) IN = $(EXE:=.in) OUT = $(EXE:=.out) PAT = core_pattern PKG = american-fuzzy-lop SRC = $(wildcard *.c *.cc) CC = afl-clang-fast CXX = afl-clang-fast++ CFLAGS = -Xanalyzer -fsanitize={address,undefined} CXXFLAGS = $(CFLAGS) FUZ = AFL_BENCH_UNTIL_CRASH=1 AFL_SKIP_CPUFREQ=1 AFL_USE_ASAN=1 afl-fuzz all: $(OUT) clean: core_off -rm -frv $(EXE) $(IN) $(OUT) $(PAT) core.* *~ # default: "|/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h" core_off: /proc/sys/kernel/$(PAT) @cat $$(basename $<) | sudo tee $< &> /dev/null core_on: /proc/sys/kernel/$(PAT) $(PAT) @echo core | sudo tee $< &> /dev/null $(PAT): /proc/sys/kernel/$(PAT) @cat $< > $@ exe: $(EXE) pkg: sudo dnf -y install $(PKG) %.in: % mkdir -p $@ case '$*' in hola) tr -cd '[:lower:]' < /dev/urandom | fold -c4 | head -n16;; * ) for ((i=1; i<1024; i*=2)); do tr -cd '[:alnum:]' < /dev/urandom | fold -c$$i | head -n1 done;; esac > ./$@/samples.txt %: %.rs rustc $< -o $@ %.out: %.in -make -s core_on $(FUZ) -i ./$< -m none -o ./$@ -T $* -- ./$* -make -s core_off .PRECIOUS: $(IN) $(OUT) $(PAT) .PHONY: all clean core_off core_on exe pkg