=== Setup
Required packages: afl

==== Compiling Qt
This will build an instrumented Qt:

[source, sh]
----
export CC=$(which afl-gcc)
export CXX=$(which afl-g++)
./configure ...
make
----

=== Running the fuzzer
[source, sh]
----
cd /sys/devices/system/cpu
su
echo performance | tee cpu*/cpufreq/scaling_governor
exit

cd $testdir
afl-fuzz -m 512 -t 40 -i $input -o $output -- $testexe @@

# see for available scaling_governor values:
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors

cd /sys/devices/system/cpu
su
echo powersave | tee cpu*/cpufreq/scaling_governor
exit
----

The $input directory contains your reference input files, while the findings of the fuzzers will be written in $output.

@@ gets replaced by the name of a file generated by AFL, containing the mutated input.

=== Using ramdisk for tests
[source, sh]
----
$ mkdir afl
# mount -t tmpfs -o size=1024M tmpfs afl/
$ cd afl/
$ afl-fuzz -i inputs -o findings ...
----

=== Sources
1. https://www.kdab.com/fuzzing-qt-fun-profit/
