Alat untuk analisis cakupan level biner yang efisien. BCOV secara statis instrumen x86-64 binari ELF tanpa dukungan kompiler. Ini fitur pemangkasan probe, analisis CFG yang tepat, dan teknik instrumentasi yang canggih. Kami merangkum penelitian ini dalam video teaser 2 menit.
bcov tersedia di sini. Namun, set lengkap tolok ukur tersedia di repositori arsip kami. Paket perangkat lunak berikut harus tersedia:
next Commit #C3B4CE1901master Commit #536C4E77C4 Versi kemudian dari kedua kerangka kerja harus bekerja pada prinsipnya tetapi belum diuji. install.sh skrip dapat digunakan untuk instalasi.
Kami menyediakan DockerFile yang memasang BCOV dan menjalankan percobaan analisis cakupan. Silakan periksa artefak tambahan untuk lebih jelasnya.
Alat ini mendukung mode operasi berikut yang diatur menggunakan opsi --mode (atau hanya -m ):
patch . Tambalan biner yang diberikan.report . Laporan Cakupan Diberikan biner yang ditambal dan file data cakupan.dump . Buang berbagai grafik program untuk fungsi yang diberikan. Misalnya, buang pohon CFG dan Dominator.Perintah berikut dapat dikeluarkan untuk menambal biner,
bcov -m patch -p any -v 5 -i perl -o perl.any Kebijakan instrumentasi dapat diatur ke any , yang mengacu pada kebijakan apa pun, atau all yang mengacu pada kebijakan node daun.
Data cakupan dapat dibuang dengan menyuntikkan libbcov-rt.so menggunakan mekanisme LD_PRELOAD . Misalnya, Anda dapat mencoba sampel biner perl.any yang dapat ditemukan di repositori artefak,
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" 'Ini akan menghasilkan file dump yang memiliki ekstensi '.bcov' di direktori Anda saat ini. File ini dapat disuplai ke BCOV untuk pelaporan cakupan,
bcov -m report -p any -i ./perl -d perl.any.1588260679.1816.bcov > report.out Saat ini, BCOV tidak dapat mempertahankan hasil analisis ke disk. Oleh karena itu, biner asli harus dianalisis ulang untuk melaporkan cakupan. Cakupan akan dilaporkan untuk setiap blok dasar dalam report.out file.out. Data di setiap daftar baris:
Juga, ringkasan cakupan dilaporkan untuk setiap fungsi. Misalnya, ini menunjukkan blok dasar dan rasio cakupan instruksi.
Untuk fungsi yang diberikan, dimungkinkan untuk secara selektif membuang berbagai grafik program seperti CFG dan grafik dominator superblock. Misalnya, pertimbangkan fungsi S_search_const di perl ,
bcov -m dump -f " S_search_const " -i ./perlPerintah ini akan membuang file berikut:
Grafik dibuang dalam format titik standar dan dapat dilihat menggunakan penampil titik seperti xdot . Silakan merujuk ke posting blog ini untuk detail tambahan.
Untuk kutipan dalam pekerjaan akademik, silakan gunakan:
@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}
}
Perangkat lunak ini didistribusikan di bawah lisensi MIT. Lihat LICENSE.txt untuk detailnya.