Un outil pour une analyse de couverture de niveau binaire efficace. BCOV Instruments statiquement x86-64 Binaires ELF sans support du compilateur. Il présente une élagage de sonde, des analyses CFG précises et des techniques d'instrumentation sophistiquées. Nous avons résumé cette recherche dans une vidéo teaser de 2 minutes.
bcov est disponible ici. Cependant, l'ensemble complet de repères est disponible sur notre référentiel d'archives. Les packages logiciels suivants doivent être disponibles:
next # C3B4CE1901master Commit # 536C4E77C4 Les versions ultérieures des deux cadres devraient fonctionner en principe mais n'ont pas encore été testées. Le script install.sh peut être utilisé pour l'installation.
Nous fournissons un dockerfile qui installe BCOV et lance une expérience d'analyse de couverture. Veuillez vérifier les artefacts supplémentaires pour plus de détails.
L'outil prend en charge les modes de fonctionnement suivants qui sont définis à l'aide de l'option --mode (ou simplement -m ):
patch . Patcher un binaire donné.report . RAPPORT COUVERTURE Étant donné un binaire corrigé et un fichier de données de couverture.dump . Vider divers graphiques de programme pour une fonction donnée. Par exemple, jetez les arbres CFG et Dominator.La commande suivante peut être émise pour corriger un binaire,
bcov -m patch -p any -v 5 -i perl -o perl.any La politique d'instrumentation peut être définie sur any , qui fait référence à la politique de n'importe quel nœud, ou all ce qui fait référence à la politique de nœud foliaire.
Les données de couverture peuvent être déversées en injectant libbcov-rt.so à l'aide du mécanisme LD_PRELOAD . Par exemple, vous pouvez essayer l'échantillon perl.any binaire qui peut être trouvé dans le référentiel des artefacts,
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" 'Cela produira un fichier de vidage qui a l'extension «.bcov» dans votre répertoire actuel. Ce fichier peut être fourni à BCOV pour les rapports de couverture,
bcov -m report -p any -i ./perl -d perl.any.1588260679.1816.bcov > report.out Actuellement, BCOV ne peut pas persister les résultats de l'analyse du disque. Par conséquent, le binaire d'origine doit être réanalysé pour signaler la couverture. La couverture sera signalée pour chaque bloc de base dans le report.out de fichier. Les données de chaque ligne répertorie:
De plus, un résumé de la couverture est signalé pour chaque fonction. Par exemple, il montre les rapports de base du bloc et de la couverture de l'instruction.
Pour une fonction donnée, il est possible de vider sélectivement divers graphiques de programme comme le graphique CFG et SuperBlock Dominator. Par exemple, considérez la fonction S_search_const dans perl ,
bcov -m dump -f " S_search_const " -i ./perlCette commande videra les fichiers suivants:
Les graphiques sont jetés dans le format DOT standard et peuvent être affichés à l'aide d'une visionneuse de points comme xdot . Veuillez vous référer à cet article de blog pour plus de détails.
Pour la citation dans un travail académique, veuillez utiliser:
@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}
}
Ce logiciel est distribué sous la licence MIT. Voir LICENSE.txt pour plus de détails.