diff --git a/fuzz-helper.sh b/fuzz-helper.sh new file mode 100755 index 0000000..e3bee03 --- /dev/null +++ b/fuzz-helper.sh @@ -0,0 +1,56 @@ +#!/bin/bash +# +# Quick 'n dirty Script to build and run FlashMQ with American Fuzzy Lop. + +thisfile=$(readlink --canonicalize "$0") +thisdir=$(dirname "$thisfile") + +if [[ -z "$AFL_ROOT" ]]; then + echo "ERROR: set AFL_ROOT environment variable" + exit 1 +fi + +if [[ -z "$FLASHMQ_SRC" ]]; then + echo "ERROR: set FLASHMQ_SRC environment variable" + exit 1 +fi + +set -u + +if [[ ! -d "$FLASHMQ_SRC/fuzztests" ]]; then + echo "Folder 'fuzztests' not found in '$FLASHMQ_SRC'" + exit 1 +fi + +if [[ "$1" == "build" ]]; then + + export CC="$AFL_ROOT/afl-gcc" + export CXX="$AFL_ROOT/afl-g++" + + mkdir "fuzzbuild" + cd "fuzzbuild" || exit 1 + + "$thisdir/build.sh" Debug + + if [[ -f "./FlashMQBuildDebug/FlashMQ" ]]; then + cp -v "./FlashMQBuildDebug/FlashMQ" .. + fi +fi + +if [[ "$1" == "run" ]]; then + INPUTDIR="$FLASHMQ_SRC/fuzztests" + OUTPUTDIR="fuzzoutput" + BINARY="./FlashMQ" + + if [[ ! -d "$OUTPUTDIR" ]]; then + mkdir "$OUTPUTDIR" + fi + + tmux new-session -s flashmqfuzz -d "'$AFL_ROOT/afl-fuzz' -m 200 -M primary -i '$INPUTDIR' -o '$OUTPUTDIR' '$BINARY' --fuzz-file '@@'; sleep 5" + tmux split-window -t flashmqfuzz -v "'$AFL_ROOT/afl-fuzz' -m 200 -S secondary01 -i '$INPUTDIR' -o '$OUTPUTDIR' '$BINARY' --fuzz-file '@@'; sleep 5" + tmux split-window -t flashmqfuzz -h "'$AFL_ROOT/afl-fuzz' -m 200 -S secondary02 -i '$INPUTDIR' -o '$OUTPUTDIR' '$BINARY' --fuzz-file '@@'; sleep 5" + tmux select-pane -t flashmqfuzz -U + tmux split-window -t flashmqfuzz -h "'$AFL_ROOT/afl-fuzz' -m 200 -S secondary03 -i '$INPUTDIR' -o '$OUTPUTDIR' '$BINARY' --fuzz-file '@@'; sleep 5" + + tmux attach-session -d -t flashmqfuzz +fi