bcov
1.0.0
有效二进制覆盖范围分析的工具。 BCOV静态仪器X86-64没有编译器支持的精灵二进制文件。它具有探针修剪,精确的CFG分析和复杂的仪器技术。我们在2分钟的预告片视频中总结了这项研究。
bcov修补的二进制文件的样本集可在此处使用。但是,我们的档案存储库中提供了完整的基准集。 必须可用以下软件包:
next提交#C3B4CE1901master Commit#536C4E77C4以后的两个框架版本应原则上有效,但尚未进行测试。脚本install.sh可用于安装。
我们提供了安装BCOV并运行覆盖范围分析实验的Dockerfile。请查看补充工件以获取更多详细信息。
该工具支持以下使用选项--mode (或简单-m )设置的操作模式:
patch 。补丁给定的二进制。report 。报告覆盖范围给定修补的二进制文件和覆盖范围数据文件。dump 。转储给定功能的各种程序图。例如,倾倒CFG和Dominator树。可以发出以下命令来修补二进制
bcov -m patch -p any -v 5 -i perl -o perl.any可以将仪器策略设置为any引用任何节点策略或指叶子节点策略的all内容。
可以通过使用LD_PRELOAD机构注入libbcov-rt.so来倾倒覆盖范围数据。例如,您可以尝试在文物存储库中找到的样本二进制perl.any 。
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" '这将产生当前目录中具有扩展名的“ .bcov”的转储文件。该文件可以提供给BCOV以进行覆盖范围报告,
bcov -m report -p any -i ./perl -d perl.any.1588260679.1816.bcov > report.out目前, BCOV无法将分析结果持续到磁盘。因此,必须重新分析原始二进制以报告覆盖范围。将在文件report.out中的每个基本块报告覆盖范围。每个行列表中的数据:
另外,还报告了每个功能的覆盖范围。例如,它显示了基本块和指令覆盖率。
对于给定功能,可以选择性地转载各种程序图,例如CFG和SuperBlock Dominator图。例如,考虑perl中的函数S_search_const ,
bcov -m dump -f " S_search_const " -i ./perl此命令将转储以下文件:
图形以标准点格式倾倒,可以使用xdot之类的点查看器查看。请参阅此博客文章以获取更多详细信息。
要在学术工作中引用,请使用:
@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}
}
该软件是根据麻省理工学院许可证分发的。有关详细信息,请参见LICENSE.txt 。