Una herramienta para un análisis eficiente de cobertura de nivel binario. BCOV Instrumentos estadísticos x86-64 binarios de elfo sin soporte de compilador. Cuenta con poda de sonda, análisis de CFG precisos y técnicas sofisticadas de instrumentación. Resumimos esta investigación en un video teaser de 2 minutos.
bcov está disponible aquí. Sin embargo, el conjunto completo de puntos de referencia está disponible en nuestro repositorio de archivo. Los siguientes paquetes de software deben estar disponibles:
next Commit #C3B4CE1901master Commit #536C4E77C4 Las versiones posteriores de ambos marcos deberían funcionar en principio, pero aún no se han probado. El script install.sh se puede usar para la instalación.
Proporcionamos un Dockerfile que instala BCOV y ejecuta un experimento de análisis de cobertura. Consulte los artefactos suplementarios para obtener más detalles.
La herramienta admite los siguientes modos de operación que se establecen utilizando la opción --mode (o simplemente -m ):
patch . Parche un binario dado.report . Informe de cobertura dada un binario parcheado y un archivo de datos de cobertura.dump . Volcar varios gráficos de programa para una función dada. Por ejemplo, voltea los árboles CFG y Dominator.El siguiente comando se puede emitir para parchear un binario,
bcov -m patch -p any -v 5 -i perl -o perl.any La política de instrumentación se puede establecer en any , que se refiera a la política de cualquier nodo, o all lo cual se refiere a la política de nodos de hoja.
Los datos de cobertura se pueden descargar inyectando libbcov-rt.so utilizando el mecanismo LD_PRELOAD . Por ejemplo, puede probar la muestra binaria perl.any cualquier que se pueda encontrar en el repositorio de artefactos,
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" 'Esto producirá un archivo de volcado que tenga la extensión '.bcov' en su directorio actual. Este archivo se puede suministrar a BCOV para informes de cobertura,
bcov -m report -p any -i ./perl -d perl.any.1588260679.1816.bcov > report.out Actualmente, BCOV no puede persistir los resultados del análisis al disco. Por lo tanto, el binario original debe volver a analizarse para informar la cobertura. La cobertura se informará para cada bloque básico en el report.out del archivo. Los datos en cada línea enumeran:
Además, se informa un resumen de cobertura para cada función. Por ejemplo, muestra las relaciones básicas de cobertura de bloque e instrucciones.
Para una función determinada, es posible descargar selectivamente varios gráficos de programa como el CFG y el gráfico Dominator Superblock. Por ejemplo, considere la función S_search_const en perl ,
bcov -m dump -f " S_search_const " -i ./perlEste comando arrojará los siguientes archivos:
Los gráficos se descargan en el formato DOT estándar y se pueden ver con un visor DOT como xdot . Consulte esta publicación de blog para obtener detalles adicionales.
Para citar en un trabajo académico, use:
@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}
}
Este software se distribuye bajo la licencia MIT. Consulte LICENSE.txt para más detalles.