1*08b48e0bSAndroid Build Coastguard Worker#!/bin/sh 2*08b48e0bSAndroid Build Coastguard Worker# 3*08b48e0bSAndroid Build Coastguard Worker# american fuzzy lop++ - Advanced Persistent Graphing 4*08b48e0bSAndroid Build Coastguard Worker# ------------------------------------------------- 5*08b48e0bSAndroid Build Coastguard Worker# 6*08b48e0bSAndroid Build Coastguard Worker# Originally written by Michal Zalewski 7*08b48e0bSAndroid Build Coastguard Worker# Based on a design & prototype by Michael Rash. 8*08b48e0bSAndroid Build Coastguard Worker# 9*08b48e0bSAndroid Build Coastguard Worker# Copyright 2014, 2015 Google Inc. All rights reserved. 10*08b48e0bSAndroid Build Coastguard Worker# 11*08b48e0bSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 12*08b48e0bSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 13*08b48e0bSAndroid Build Coastguard Worker# You may obtain a copy of the License at: 14*08b48e0bSAndroid Build Coastguard Worker# 15*08b48e0bSAndroid Build Coastguard Worker# https://www.apache.org/licenses/LICENSE-2.0 16*08b48e0bSAndroid Build Coastguard Worker# 17*08b48e0bSAndroid Build Coastguard Worker 18*08b48e0bSAndroid Build Coastguard Workerget_abs_path() { 19*08b48e0bSAndroid Build Coastguard Worker echo $(cd "`dirname "$1"`" && pwd)/"`basename "$1"`" 20*08b48e0bSAndroid Build Coastguard Worker} 21*08b48e0bSAndroid Build Coastguard Worker 22*08b48e0bSAndroid Build Coastguard Workerecho "progress plotting utility for afl-fuzz by Michal Zalewski" 23*08b48e0bSAndroid Build Coastguard Workerecho 24*08b48e0bSAndroid Build Coastguard Worker 25*08b48e0bSAndroid Build Coastguard WorkerGRAPHICAL="0" 26*08b48e0bSAndroid Build Coastguard Worker 27*08b48e0bSAndroid Build Coastguard Workerif [ "$1" = "-g" ] || [ "$1" = "--graphical" ]; then 28*08b48e0bSAndroid Build Coastguard WorkerGRAPHICAL="1" 29*08b48e0bSAndroid Build Coastguard Workershift 30*08b48e0bSAndroid Build Coastguard Workerfi 31*08b48e0bSAndroid Build Coastguard Worker 32*08b48e0bSAndroid Build Coastguard Workerif [ "$#" != "2" ]; then 33*08b48e0bSAndroid Build Coastguard Worker 34*08b48e0bSAndroid Build Coastguard Worker cat 1>&2 <<_EOF_ 35*08b48e0bSAndroid Build Coastguard Worker$0 [ -g | --graphical ] afl_state_dir graph_output_dir 36*08b48e0bSAndroid Build Coastguard Worker 37*08b48e0bSAndroid Build Coastguard WorkerThis program generates gnuplot images from afl-fuzz output data. 38*08b48e0bSAndroid Build Coastguard Worker 39*08b48e0bSAndroid Build Coastguard WorkerUsage: 40*08b48e0bSAndroid Build Coastguard Worker 41*08b48e0bSAndroid Build Coastguard Worker afl_state_dir should point to an existing state directory for any 42*08b48e0bSAndroid Build Coastguard Worker active or stopped instance of afl-fuzz 43*08b48e0bSAndroid Build Coastguard Worker graph_output_dir should point to an empty directory where this 44*08b48e0bSAndroid Build Coastguard Worker tool can write the resulting plots to 45*08b48e0bSAndroid Build Coastguard Worker -g, --graphical (optional) display the plots in a graphical window 46*08b48e0bSAndroid Build Coastguard Worker (you should have built afl-plot-ui to use this option) 47*08b48e0bSAndroid Build Coastguard Worker 48*08b48e0bSAndroid Build Coastguard WorkerThe program will put index.html and three PNG images in the output directory; 49*08b48e0bSAndroid Build Coastguard Workeryou should be able to view it with any web browser of your choice. 50*08b48e0bSAndroid Build Coastguard Worker_EOF_ 51*08b48e0bSAndroid Build Coastguard Worker 52*08b48e0bSAndroid Build Coastguard Worker exit 1 53*08b48e0bSAndroid Build Coastguard Worker 54*08b48e0bSAndroid Build Coastguard Workerfi 55*08b48e0bSAndroid Build Coastguard Worker 56*08b48e0bSAndroid Build Coastguard Workerinputdir=`get_abs_path "$1"` 57*08b48e0bSAndroid Build Coastguard Workeroutputdir=`get_abs_path "$2"` 58*08b48e0bSAndroid Build Coastguard Worker 59*08b48e0bSAndroid Build Coastguard Worker#if [ "$AFL_ALLOW_TMP" = "" ]; then 60*08b48e0bSAndroid Build Coastguard Worker# 61*08b48e0bSAndroid Build Coastguard Worker# echo "$inputdir" | grep -qE '^(/var)?/tmp/' 62*08b48e0bSAndroid Build Coastguard Worker# T1="$?" 63*08b48e0bSAndroid Build Coastguard Worker# 64*08b48e0bSAndroid Build Coastguard Worker# echo "$outputdir" | grep -qE '^(/var)?/tmp/' 65*08b48e0bSAndroid Build Coastguard Worker# T2="$?" 66*08b48e0bSAndroid Build Coastguard Worker# 67*08b48e0bSAndroid Build Coastguard Worker# if [ "$T1" = "0" -o "$T2" = "0" ]; then 68*08b48e0bSAndroid Build Coastguard Worker# 69*08b48e0bSAndroid Build Coastguard Worker# echo "[-] Error: this script shouldn't be used with shared /tmp directories." 1>&2 70*08b48e0bSAndroid Build Coastguard Worker# exit 1 71*08b48e0bSAndroid Build Coastguard Worker# 72*08b48e0bSAndroid Build Coastguard Worker# fi 73*08b48e0bSAndroid Build Coastguard Worker# 74*08b48e0bSAndroid Build Coastguard Worker#fi 75*08b48e0bSAndroid Build Coastguard Worker 76*08b48e0bSAndroid Build Coastguard Workerif [ ! -f "$inputdir/plot_data" ]; then 77*08b48e0bSAndroid Build Coastguard Worker 78*08b48e0bSAndroid Build Coastguard Worker if [ -f "$inputdir/default/plot_data" ]; then 79*08b48e0bSAndroid Build Coastguard Worker 80*08b48e0bSAndroid Build Coastguard Worker echo "[-] Error: input directory is not valid (missing 'plot_data'), likely you mean $inputdir/default?" 1>&2 81*08b48e0bSAndroid Build Coastguard Worker exit 1 82*08b48e0bSAndroid Build Coastguard Worker 83*08b48e0bSAndroid Build Coastguard Worker else 84*08b48e0bSAndroid Build Coastguard Worker 85*08b48e0bSAndroid Build Coastguard Worker echo "[-] Error: input directory is not valid (missing 'plot_data')." 1>&2 86*08b48e0bSAndroid Build Coastguard Worker exit 1 87*08b48e0bSAndroid Build Coastguard Worker 88*08b48e0bSAndroid Build Coastguard Worker fi 89*08b48e0bSAndroid Build Coastguard Worker 90*08b48e0bSAndroid Build Coastguard Workerfi 91*08b48e0bSAndroid Build Coastguard Worker 92*08b48e0bSAndroid Build Coastguard WorkerLINES=`cat "$inputdir/plot_data" | wc -l` 93*08b48e0bSAndroid Build Coastguard Worker 94*08b48e0bSAndroid Build Coastguard Workerif [ "$LINES" -lt 3 ]; then 95*08b48e0bSAndroid Build Coastguard Worker 96*08b48e0bSAndroid Build Coastguard Worker echo "[-] Error: plot_data carries too little data, let it run longer." 1>&2 97*08b48e0bSAndroid Build Coastguard Worker exit 1 98*08b48e0bSAndroid Build Coastguard Worker 99*08b48e0bSAndroid Build Coastguard Workerfi 100*08b48e0bSAndroid Build Coastguard Worker 101*08b48e0bSAndroid Build Coastguard WorkerBANNER="`cat "$inputdir/fuzzer_stats" 2> /dev/null | grep '^afl_banner ' | cut -d: -f2- | cut -b2-`" 102*08b48e0bSAndroid Build Coastguard Worker 103*08b48e0bSAndroid Build Coastguard Workertest "$BANNER" = "" && BANNER="(none)" 104*08b48e0bSAndroid Build Coastguard Worker 105*08b48e0bSAndroid Build Coastguard WorkerGNUPLOT=`command -v gnuplot 2>/dev/null` 106*08b48e0bSAndroid Build Coastguard Worker 107*08b48e0bSAndroid Build Coastguard Workerif [ "$GNUPLOT" = "" ]; then 108*08b48e0bSAndroid Build Coastguard Worker 109*08b48e0bSAndroid Build Coastguard Worker echo "[-] Error: can't find 'gnuplot' in your \$PATH." 1>&2 110*08b48e0bSAndroid Build Coastguard Worker exit 1 111*08b48e0bSAndroid Build Coastguard Worker 112*08b48e0bSAndroid Build Coastguard Workerfi 113*08b48e0bSAndroid Build Coastguard Worker 114*08b48e0bSAndroid Build Coastguard Workermkdir "$outputdir" 2>/dev/null 115*08b48e0bSAndroid Build Coastguard Worker 116*08b48e0bSAndroid Build Coastguard Workerif [ ! -d "$outputdir" ]; then 117*08b48e0bSAndroid Build Coastguard Worker 118*08b48e0bSAndroid Build Coastguard Worker echo "[-] Error: unable to create the output directory - pick another location." 1>&2 119*08b48e0bSAndroid Build Coastguard Worker exit 1 120*08b48e0bSAndroid Build Coastguard Worker 121*08b48e0bSAndroid Build Coastguard Workerfi 122*08b48e0bSAndroid Build Coastguard Worker 123*08b48e0bSAndroid Build Coastguard Workerrm -f "$outputdir/high_freq.png" "$outputdir/low_freq.png" "$outputdir/exec_speed.png" "$outputdir/edges.png" 124*08b48e0bSAndroid Build Coastguard Workermv -f "$outputdir/index.html" "$outputdir/index.html.orig" 2>/dev/null 125*08b48e0bSAndroid Build Coastguard Worker 126*08b48e0bSAndroid Build Coastguard WorkerGNUPLOT_SETUP=" 127*08b48e0bSAndroid Build Coastguard Worker#set xdata time 128*08b48e0bSAndroid Build Coastguard Worker#set timefmt '%s' 129*08b48e0bSAndroid Build Coastguard Worker#set format x \"%b %d\n%H:%M\" 130*08b48e0bSAndroid Build Coastguard Workerset tics font 'small' 131*08b48e0bSAndroid Build Coastguard Workerunset mxtics 132*08b48e0bSAndroid Build Coastguard Workerunset mytics 133*08b48e0bSAndroid Build Coastguard Worker 134*08b48e0bSAndroid Build Coastguard Workerset grid xtics linetype 0 linecolor rgb '#e0e0e0' 135*08b48e0bSAndroid Build Coastguard Workerset grid ytics linetype 0 linecolor rgb '#e0e0e0' 136*08b48e0bSAndroid Build Coastguard Workerset border linecolor rgb '#50c0f0' 137*08b48e0bSAndroid Build Coastguard Workerset tics textcolor rgb '#000000' 138*08b48e0bSAndroid Build Coastguard Workerset key outside 139*08b48e0bSAndroid Build Coastguard Worker 140*08b48e0bSAndroid Build Coastguard Workerset autoscale xfixmin 141*08b48e0bSAndroid Build Coastguard Workerset autoscale xfixmax 142*08b48e0bSAndroid Build Coastguard Worker 143*08b48e0bSAndroid Build Coastguard Workerset xlabel \"relative time in seconds\" font \"small\" 144*08b48e0bSAndroid Build Coastguard Worker" 145*08b48e0bSAndroid Build Coastguard Worker 146*08b48e0bSAndroid Build Coastguard WorkerPLOT_HF=" 147*08b48e0bSAndroid Build Coastguard Workerset terminal png truecolor enhanced size 1000,300 butt 148*08b48e0bSAndroid Build Coastguard Workerset output '$outputdir/high_freq.png' 149*08b48e0bSAndroid Build Coastguard Worker 150*08b48e0bSAndroid Build Coastguard Worker$GNUPLOT_SETUP 151*08b48e0bSAndroid Build Coastguard Worker 152*08b48e0bSAndroid Build Coastguard Workerplot '$inputdir/plot_data' using 1:4 with filledcurve x1 title 'corpus count' linecolor rgb '#000000' fillstyle transparent solid 0.2 noborder, \\ 153*08b48e0bSAndroid Build Coastguard Worker '' using 1:3 with filledcurve x1 title 'current item' linecolor rgb '#f0f0f0' fillstyle transparent solid 0.5 noborder, \\ 154*08b48e0bSAndroid Build Coastguard Worker '' using 1:5 with lines title 'pending items' linecolor rgb '#0090ff' linewidth 3, \\ 155*08b48e0bSAndroid Build Coastguard Worker '' using 1:6 with lines title 'pending favs' linecolor rgb '#c00080' linewidth 3, \\ 156*08b48e0bSAndroid Build Coastguard Worker '' using 1:2 with lines title 'cycles done' linecolor rgb '#c000f0' linewidth 3 157*08b48e0bSAndroid Build Coastguard Worker" 158*08b48e0bSAndroid Build Coastguard Worker 159*08b48e0bSAndroid Build Coastguard WorkerPLOT_LF=" 160*08b48e0bSAndroid Build Coastguard Workerset terminal png truecolor enhanced size 1000,200 butt 161*08b48e0bSAndroid Build Coastguard Workerset output '$outputdir/low_freq.png' 162*08b48e0bSAndroid Build Coastguard Worker 163*08b48e0bSAndroid Build Coastguard Worker$GNUPLOT_SETUP 164*08b48e0bSAndroid Build Coastguard Worker 165*08b48e0bSAndroid Build Coastguard Workerplot '$inputdir/plot_data' using 1:8 with filledcurve x1 title '' linecolor rgb '#c00080' fillstyle transparent solid 0.2 noborder, \\ 166*08b48e0bSAndroid Build Coastguard Worker '' using 1:8 with lines title ' uniq crashes' linecolor rgb '#c00080' linewidth 3, \\ 167*08b48e0bSAndroid Build Coastguard Worker '' using 1:9 with lines title 'uniq hangs' linecolor rgb '#c000f0' linewidth 3, \\ 168*08b48e0bSAndroid Build Coastguard Worker '' using 1:10 with lines title 'levels' linecolor rgb '#0090ff' linewidth 3 169*08b48e0bSAndroid Build Coastguard Worker" 170*08b48e0bSAndroid Build Coastguard Worker 171*08b48e0bSAndroid Build Coastguard WorkerPLOT_ES=" 172*08b48e0bSAndroid Build Coastguard Workerset terminal png truecolor enhanced size 1000,200 butt 173*08b48e0bSAndroid Build Coastguard Workerset output '$outputdir/exec_speed.png' 174*08b48e0bSAndroid Build Coastguard Worker 175*08b48e0bSAndroid Build Coastguard Worker$GNUPLOT_SETUP 176*08b48e0bSAndroid Build Coastguard Worker 177*08b48e0bSAndroid Build Coastguard Workerplot '$inputdir/plot_data' using 1:11 with filledcurve x1 title '' linecolor rgb '#0090ff' fillstyle transparent solid 0.2 noborder, \\ 178*08b48e0bSAndroid Build Coastguard Worker '$inputdir/plot_data' using 1:11 with lines title ' execs/sec' linecolor rgb '#0090ff' linewidth 3 smooth bezier; 179*08b48e0bSAndroid Build Coastguard Worker" 180*08b48e0bSAndroid Build Coastguard Worker 181*08b48e0bSAndroid Build Coastguard WorkerPLOT_EG=" 182*08b48e0bSAndroid Build Coastguard Workerset terminal png truecolor enhanced size 1000,300 butt 183*08b48e0bSAndroid Build Coastguard Workerset output '$outputdir/edges.png' 184*08b48e0bSAndroid Build Coastguard Worker 185*08b48e0bSAndroid Build Coastguard Worker$GNUPLOT_SETUP 186*08b48e0bSAndroid Build Coastguard Worker 187*08b48e0bSAndroid Build Coastguard Workerplot '$inputdir/plot_data' using 1:13 with lines title ' edges' linecolor rgb '#0090ff' linewidth 3 188*08b48e0bSAndroid Build Coastguard Worker" 189*08b48e0bSAndroid Build Coastguard Worker 190*08b48e0bSAndroid Build Coastguard Workerif [ "$#" = "2" ] && [ "$GRAPHICAL" = "1" ]; then 191*08b48e0bSAndroid Build Coastguard Worker 192*08b48e0bSAndroid Build Coastguard Workerafl-plot-ui -h > /dev/null 2>&1 193*08b48e0bSAndroid Build Coastguard Worker 194*08b48e0bSAndroid Build Coastguard Workerif [ "$?" != "0" ]; then 195*08b48e0bSAndroid Build Coastguard Worker 196*08b48e0bSAndroid Build Coastguard Workercat 1>&2 <<_EOF_ 197*08b48e0bSAndroid Build Coastguard WorkerYou do not seem to have the afl-plot-ui utility installed. If you have installed afl-plot-ui, make sure the afl-plot-ui executable is in your PATH. 198*08b48e0bSAndroid Build Coastguard WorkerIf you are still facing any problems, please open an issue at https://github.com/AFLplusplus/AFLplusplus/issues. 199*08b48e0bSAndroid Build Coastguard Worker 200*08b48e0bSAndroid Build Coastguard WorkerNo plots have been generated. Please rerun without the "-g" or "--graphical" flag to generate the plots. 201*08b48e0bSAndroid Build Coastguard Worker_EOF_ 202*08b48e0bSAndroid Build Coastguard Worker 203*08b48e0bSAndroid Build Coastguard Workerexit 1 204*08b48e0bSAndroid Build Coastguard Worker 205*08b48e0bSAndroid Build Coastguard Workerfi 206*08b48e0bSAndroid Build Coastguard Worker 207*08b48e0bSAndroid Build Coastguard Workerrm -rf "$outputdir/.tmp" 208*08b48e0bSAndroid Build Coastguard Workermkdir -p "$outputdir/.tmp" 209*08b48e0bSAndroid Build Coastguard Workermkfifo "$outputdir/.tmp/win_ids" || exit 1 210*08b48e0bSAndroid Build Coastguard Worker 211*08b48e0bSAndroid Build Coastguard Workerafl-plot-ui > "$outputdir/.tmp/win_ids" & 212*08b48e0bSAndroid Build Coastguard WorkerW_IDS=$(cat "$outputdir/.tmp/win_ids") 213*08b48e0bSAndroid Build Coastguard Worker 214*08b48e0bSAndroid Build Coastguard Workerrm -rf "$outputdir/.tmp" 215*08b48e0bSAndroid Build Coastguard Worker 216*08b48e0bSAndroid Build Coastguard WorkerW_ID1=$(echo "$W_IDS" | head -n 1) 217*08b48e0bSAndroid Build Coastguard WorkerW_ID2=$(echo "$W_IDS" | head -n 2 | tail -n 1) 218*08b48e0bSAndroid Build Coastguard WorkerW_ID3=$(echo "$W_IDS" | head -n 3 | tail -n 1) 219*08b48e0bSAndroid Build Coastguard WorkerW_ID4=$(echo "$W_IDS" | tail -n 1) 220*08b48e0bSAndroid Build Coastguard Worker 221*08b48e0bSAndroid Build Coastguard Workerecho "[*] Generating plots..." 222*08b48e0bSAndroid Build Coastguard Worker 223*08b48e0bSAndroid Build Coastguard Worker( 224*08b48e0bSAndroid Build Coastguard Worker 225*08b48e0bSAndroid Build Coastguard Workercat << _EOF_ 226*08b48e0bSAndroid Build Coastguard Worker 227*08b48e0bSAndroid Build Coastguard Worker$PLOT_HF 228*08b48e0bSAndroid Build Coastguard Workerset term x11 window "$W_ID3" 229*08b48e0bSAndroid Build Coastguard Workerset output 230*08b48e0bSAndroid Build Coastguard Workerreplot 231*08b48e0bSAndroid Build Coastguard Workerpause mouse close 232*08b48e0bSAndroid Build Coastguard Worker 233*08b48e0bSAndroid Build Coastguard Worker_EOF_ 234*08b48e0bSAndroid Build Coastguard Worker 235*08b48e0bSAndroid Build Coastguard Worker) | gnuplot 2> /dev/null & 236*08b48e0bSAndroid Build Coastguard Worker 237*08b48e0bSAndroid Build Coastguard Worker( 238*08b48e0bSAndroid Build Coastguard Worker 239*08b48e0bSAndroid Build Coastguard Workercat << _EOF_ 240*08b48e0bSAndroid Build Coastguard Worker 241*08b48e0bSAndroid Build Coastguard Worker$PLOT_LF 242*08b48e0bSAndroid Build Coastguard Workerset term x11 window "$W_ID4" 243*08b48e0bSAndroid Build Coastguard Workerset output 244*08b48e0bSAndroid Build Coastguard Workerreplot 245*08b48e0bSAndroid Build Coastguard Workerpause mouse close 246*08b48e0bSAndroid Build Coastguard Worker 247*08b48e0bSAndroid Build Coastguard Worker_EOF_ 248*08b48e0bSAndroid Build Coastguard Worker 249*08b48e0bSAndroid Build Coastguard Worker) | gnuplot 2> /dev/null & 250*08b48e0bSAndroid Build Coastguard Worker 251*08b48e0bSAndroid Build Coastguard Worker( 252*08b48e0bSAndroid Build Coastguard Worker 253*08b48e0bSAndroid Build Coastguard Workercat << _EOF_ 254*08b48e0bSAndroid Build Coastguard Worker 255*08b48e0bSAndroid Build Coastguard Worker$PLOT_ES 256*08b48e0bSAndroid Build Coastguard Workerset term x11 window "$W_ID2" 257*08b48e0bSAndroid Build Coastguard Workerset output 258*08b48e0bSAndroid Build Coastguard Workerreplot 259*08b48e0bSAndroid Build Coastguard Workerpause mouse close 260*08b48e0bSAndroid Build Coastguard Worker 261*08b48e0bSAndroid Build Coastguard Worker_EOF_ 262*08b48e0bSAndroid Build Coastguard Worker 263*08b48e0bSAndroid Build Coastguard Worker) | gnuplot 2> /dev/null & 264*08b48e0bSAndroid Build Coastguard Worker 265*08b48e0bSAndroid Build Coastguard Worker( 266*08b48e0bSAndroid Build Coastguard Worker 267*08b48e0bSAndroid Build Coastguard Workercat << _EOF_ 268*08b48e0bSAndroid Build Coastguard Worker 269*08b48e0bSAndroid Build Coastguard Worker$PLOT_EG 270*08b48e0bSAndroid Build Coastguard Workerset term x11 window "$W_ID1" 271*08b48e0bSAndroid Build Coastguard Workerset output 272*08b48e0bSAndroid Build Coastguard Workerreplot 273*08b48e0bSAndroid Build Coastguard Workerpause mouse close 274*08b48e0bSAndroid Build Coastguard Worker 275*08b48e0bSAndroid Build Coastguard Worker_EOF_ 276*08b48e0bSAndroid Build Coastguard Worker 277*08b48e0bSAndroid Build Coastguard Worker) | gnuplot 2> /dev/null & 278*08b48e0bSAndroid Build Coastguard Worker 279*08b48e0bSAndroid Build Coastguard Workersleep 1 280*08b48e0bSAndroid Build Coastguard Worker 281*08b48e0bSAndroid Build Coastguard Workerelse 282*08b48e0bSAndroid Build Coastguard Worker 283*08b48e0bSAndroid Build Coastguard Workerecho "[*] Generating plots..." 284*08b48e0bSAndroid Build Coastguard Worker 285*08b48e0bSAndroid Build Coastguard Worker( 286*08b48e0bSAndroid Build Coastguard Worker 287*08b48e0bSAndroid Build Coastguard Workercat << _EOF_ 288*08b48e0bSAndroid Build Coastguard Worker 289*08b48e0bSAndroid Build Coastguard Worker$PLOT_HF 290*08b48e0bSAndroid Build Coastguard Worker 291*08b48e0bSAndroid Build Coastguard Worker$PLOT_LF 292*08b48e0bSAndroid Build Coastguard Worker 293*08b48e0bSAndroid Build Coastguard Worker$PLOT_ES 294*08b48e0bSAndroid Build Coastguard Worker 295*08b48e0bSAndroid Build Coastguard Worker$PLOT_EG 296*08b48e0bSAndroid Build Coastguard Worker 297*08b48e0bSAndroid Build Coastguard Worker_EOF_ 298*08b48e0bSAndroid Build Coastguard Worker 299*08b48e0bSAndroid Build Coastguard Worker) | gnuplot || echo "Note: if you see errors concerning 'unknown or ambiguous terminal type' then you need to use a gnuplot that has png support compiled in." 300*08b48e0bSAndroid Build Coastguard Worker 301*08b48e0bSAndroid Build Coastguard Workerecho "[?] You can also use -g flag to view the plots in an GUI window, and interact with the plots (if you have built afl-plot-ui). Run \"afl-plot -h\" to know more." 302*08b48e0bSAndroid Build Coastguard Worker 303*08b48e0bSAndroid Build Coastguard Workerfi 304*08b48e0bSAndroid Build Coastguard Worker 305*08b48e0bSAndroid Build Coastguard Workerif [ ! -s "$outputdir/exec_speed.png" ]; then 306*08b48e0bSAndroid Build Coastguard Worker 307*08b48e0bSAndroid Build Coastguard Worker echo "[-] Error: something went wrong! Perhaps you have an ancient version of gnuplot?" 1>&2 308*08b48e0bSAndroid Build Coastguard Worker exit 1 309*08b48e0bSAndroid Build Coastguard Worker 310*08b48e0bSAndroid Build Coastguard Workerfi 311*08b48e0bSAndroid Build Coastguard Worker 312*08b48e0bSAndroid Build Coastguard Workerecho "[*] Generating index.html..." 313*08b48e0bSAndroid Build Coastguard Worker 314*08b48e0bSAndroid Build Coastguard Workercat >"$outputdir/index.html" <<_EOF_ 315*08b48e0bSAndroid Build Coastguard Worker<table style="font-family: 'Trebuchet MS', 'Tahoma', 'Arial', 'Helvetica'"> 316*08b48e0bSAndroid Build Coastguard Worker<tr><td style="width: 18ex"><b>Banner:</b></td><td>$BANNER</td></tr> 317*08b48e0bSAndroid Build Coastguard Worker<tr><td><b>Directory:</b></td><td>$inputdir</td></tr> 318*08b48e0bSAndroid Build Coastguard Worker<tr><td><b>Generated on:</b></td><td>`date`</td></tr> 319*08b48e0bSAndroid Build Coastguard Worker</table> 320*08b48e0bSAndroid Build Coastguard Worker<p> 321*08b48e0bSAndroid Build Coastguard Worker<img src="edges.png" width=1000 height=300> 322*08b48e0bSAndroid Build Coastguard Worker<img src="high_freq.png" width=1000 height=300><p> 323*08b48e0bSAndroid Build Coastguard Worker<img src="low_freq.png" width=1000 height=200><p> 324*08b48e0bSAndroid Build Coastguard Worker<img src="exec_speed.png" width=1000 height=200> 325*08b48e0bSAndroid Build Coastguard Worker 326*08b48e0bSAndroid Build Coastguard Worker_EOF_ 327*08b48e0bSAndroid Build Coastguard Worker 328*08b48e0bSAndroid Build Coastguard Worker# Make it easy to remotely view results when outputting directly to a directory 329*08b48e0bSAndroid Build Coastguard Worker# served by Apache or other HTTP daemon. Since the plots aren't horribly 330*08b48e0bSAndroid Build Coastguard Worker# sensitive, this seems like a reasonable trade-off. 331*08b48e0bSAndroid Build Coastguard Worker 332*08b48e0bSAndroid Build Coastguard Workerchmod 755 "$outputdir" 333*08b48e0bSAndroid Build Coastguard Workerchmod 644 "$outputdir/high_freq.png" "$outputdir/low_freq.png" "$outputdir/exec_speed.png" "$outputdir/edges.png" "$outputdir/index.html" 334*08b48e0bSAndroid Build Coastguard Worker 335*08b48e0bSAndroid Build Coastguard Workerecho "[+] All done - enjoy your charts!" 336*08b48e0bSAndroid Build Coastguard Worker 337*08b48e0bSAndroid Build Coastguard Workerexit 0 338