Ein Werkzeug für eine effiziente Abdeckungsanalyse auf binärer Ebene. BCOV Instrumente x86-64 Elf-Binärdateien ohne Compiler-Unterstützung. Es verfügt über Probe -Beschneidung, präzise CFG -Analysen und ausgefeilte Instrumentierungstechniken. Wir haben diese Forschung in einem 2-minütigen Teaser-Video zusammengefasst.
bcov gepatcht haben, finden Sie hier. Der vollständige Satz von Benchmarks ist jedoch in unserem Archiv -Repository verfügbar. Die folgenden Softwarepakete müssen verfügbar sein:
next Commit #C3B4CE1901master Commit #536C4E77C4 Spätere Versionen beider Frameworks sollten grundsätzlich funktionieren, aber noch nicht getestet wurden. Das Skript install.sh kann zur Installation verwendet werden.
Wir bieten eine Dockerfile, die BCOV installiert und ein Experiment zur Abdeckungsanalyse durchführt. Bitte schauen Sie die ergänzenden Artefakte an, um weitere Informationen zu erhalten.
Das Tool unterstützt die folgenden Betriebsmodi, die mithilfe der Option --mode (oder einfach -m ) festgelegt werden:
patch . Patch einen gegebenen Binärer.report . Berichtsberichterstattung bei einer gepatpften binären und einer Deckungsdatendatei.dump . Dumpen Sie verschiedene Programmdiagramme für eine bestimmte Funktion ab. Lassen Sie zum Beispiel die CFG- und Dominator -Bäume ab.Der folgende Befehl kann ausgestellt werden, um eine Binärdatei zu patchen.
bcov -m patch -p any -v 5 -i perl -o perl.any Die Instrumentierungsrichtlinie kann auf any festgelegt werden, die sich auf die Richtlinien der Any-Node-Richtlinie bezieht, oder all , die sich auf die Blattknotenpolitik beziehen.
Abdeckungsdaten können durch Injektion libbcov-rt.so unter Verwendung des LD_PRELOAD Mechanismus abgeladen werden. Sie können beispielsweise das Beispiel -Binär -Perl perl.any ausprobieren, das im Repository des Artefakts zu finden ist.
export BCOV_OPTIONS= " coverage_dir= $PWD " # sets the directory for dumping coverage data. Defaults to $PWD
export LD_PRELOAD= " [full-path-to-bcov-rt]/libbcov-rt.so "
./perl.any -e ' print "Hello, bcov!n" 'Dadurch werden in Ihrem aktuellen Verzeichnis eine Dump -Datei mit der Erweiterung '.bcov' erstellt. Diese Datei kann BCOV zur Berichterstattung zur Deckung geliefert werden.
bcov -m report -p any -i ./perl -d perl.any.1588260679.1816.bcov > report.out Derzeit kann BCOV die Analyseergebnisse nicht auf der Festplatte fortsetzen. Daher muss die ursprüngliche Binärin neu analysiert werden, um die Berichterstattung zu melden. Die Berichterstattung wird für jeden Basisblock im report.out gemeldet. Die Daten in jeder Zeilenlisten:
Außerdem wird für jede Funktion eine Abdeckungsübersicht gemeldet. Beispielsweise zeigt es die grundlegenden Verhältnisse der Block- und Befehlsabdeckung an.
Für eine bestimmte Funktion ist es möglich, verschiedene Programmdiagramme wie das CFG- und das Superblock -Dominator -Diagramm selektiv abzugeben. Betrachten Sie beispielsweise die Funktion S_search_const in perl ,
bcov -m dump -f " S_search_const " -i ./perlIn diesem Befehl werden die folgenden Dateien abgelegt:
Diagramme werden im Standard -DOT -Format abgeladen und können mit einem DOT -Viewer wie xdot angezeigt werden. Weitere Informationen finden Sie in diesem Blog -Beitrag.
Für die Zitation in einer akademischen Arbeit verwenden Sie bitte:
@inproceedings{BenKhadra:FSE2020,
address = {Virtual Event, USA},
author = {{Ben Khadra}, M. Ammar and Stoffel, Dominik and Kunz, Wolfgang},
booktitle = {ACM Joint European Software Engineering Conference and Symposium on the Foundations of Software Engineering - ESEC/FSE'20},
doi = {10.1145/3368089.3409694},
pages = {1153--1164},
publisher = {ACM Press},
title = {{Efficient Binary-Level Coverage Analysis}},
year = {2020},
month = {nov},
day = {6--13}
}
Diese Software wird unter der MIT -Lizenz verteilt. Einzelheiten siehe LICENSE.txt .