ICSE Experiments
SMT queries used in Section V-A
We executed the experiments in Section V-A using the following:
NOTE: The queries in queries and queries_splitted are exactly the same, but in the former each query resides in a single file.
We collected the queries using QSYM by dumping the branch conditions of each benchmark when executed on a seed input (see Table below). In particular, we dumped the path constraints when the execution reached the Solver::negatePath
function. We also deactivated the query simplification in the Solver::add
function.
This table summarizes the benchmarks:
Benchmark | Seed | Num. of Queries |
---|---|---|
advmng | mappy.mng | 1481 |
advzip | small_archive.zip | 300 |
bloaty | small_exec.elf | 2085 |
bsdtar | tar.tar | 325 |
djpeg | not_kitty.jpg | 1245 |
jhead | not_kitty.jpg | 405 |
libpng | not_kitty.png | 1673 |
lodepng | not_kitty.png | 1531 |
objdump | small_exec.elf | 992 |
optipng | not_kitty.png | 1740 |
readelf | small_exec.elf | 1055 |
tcpdump | small_capture.pcap | 409 |
tiff2pdf | not_kitty.tiff | 3084 |
Fuzzy-SAT vs Z3 experiment
The run_batch_fuzzy_z3.sh script can be used to run both z3
and fuzzy-solver
on the queries.
To use the script, download the queries and the seeds, extract them, set accordingly QUERIES_PATH
, SEED_PATH
and OUTPUT_DIR
in the script, and run it. It will create two CSV files for for each benchmark. The script parse_info_query_splitted.py can be used to parse these CSV files and print a table about the number of queries proved sat by Fuzzy-SAT and Z3, and the elapsed time.
Fuzzy-SAT vs JFS experiment
This experiment can be executed similarly to the previous one, but you need to:
Download queries splitted.
Pull the JFS docker image (
docker pull delcypher/jfs_build:fse_2019
).Use the run_batch_fuzzy_jfs.sh script to run the actual experiment (setting
QUERIES_PATH
andSEED_PATH
).Parse the results using parse_fuzzy_jfs.py.
Configurations for benchmarks in Section V-C
Benchmark | Release | Args | Seed | Dictionary | Driver |
---|---|---|---|---|---|
advmng | advancecomp-2.0 | -l @@ |
mappy.mng | ||
advzip | advancecomp-2.0 | -l @@ |
small_archive.zip | ||
bloaty | 1.0 git 7c6fc | @@ |
small_exec.elf | ||
bsdtar | libarchive git f3b1f9 | tf @@ |
tar.tar | ||
djpeg | v9d | @@ |
not_kitty.jpg | jpeg.dict | |
jhead | 3.00-5 | @@ |
not_kitty.jpg | ||
libpng | 1.6.37 | @@ /dev/null |
not_kitty.png | png.dict | driver.c |
lodepng | 20200112 | @@ |
not_kitty.png | png.dict | |
objdump | binutils-2.34 | -d @@ |
small_exec.elf | ||
optipng | 0.7.6 | -out /dev/null @@ |
not_kitty.png | ||
readelf | binutils-2.34 | -a @@ |
small_exec.elf | ||
tcpdump | 4.9.3 (pcap 1.9.1) | -e -vv -nr @@ |
small_capture.pcap | ||
tiff2pdf | 4.1.0 | @@ |
not_kitty.tiff | tiff.dict |
NOTE #1: CRC checks were disabled in lodepng.
NOTE #2: When a benchmark is a library, we compiled it as a static library.