効率的なバイナリレベルのカバレッジ分析のためのツール。 BCOV静的機器X86-64コンパイラサポートなしのELFバイナリ。プローブの剪定、正確なCFG分析、洗練された計装技術を備えています。この研究を2分間のティーザービデオにまとめました。
bcovを使用してパッチを当てたバイナリのサンプルセットは、こちらから入手できます。ただし、ベンチマークの完全なセットは、アーカイブリポジトリで入手できます。 次のソフトウェアパッケージを利用できる必要があります。
next Commit#C3B4CE1901masterコミット#536C4E77C4両方のフレームワークの後のバージョンは原則として動作するはずですが、まだテストされていません。スクリプトinstall.sh 、インストールに使用できます。
BCOVをインストールし、カバレッジ分析実験を実行するDockerFileを提供します。詳細については、補足アーティファクトをチェックアウトしてください。
このツールは、オプション--mode (または単に-m )を使用して設定された次の操作モードをサポートします。
patch 。特定のバイナリにパッチします。report 。パッチ付きバイナリとカバレッジデータファイルを与えられた報告のカバレッジ。dump 。特定の関数のさまざまなプログラムグラフをダンプします。たとえば、CFGとドミネーターの木を捨てます。次のコマンドを発行して、バイナリをパッチすることができます。
bcov -m patch -p any -v 5 -i perl -o perl.any計装ポリシーは、任意のノードポリシーを指す、またはリーフノードポリシーを指すall anyに設定できます。
LD_PRELOADメカニズムを使用して、 libbcov-rt.soを注入することにより、カバレッジデータをダンプできます。たとえば、Artifactsリポジトリで見つけることができるサンプルバイナリ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は分析結果をディスクに維持できません。したがって、カバレッジを報告するには、元のバイナリを再分析する必要があります。 File report.outの各基本ブロックについてカバレッジが報告されます。各行のデータは次のことをリストします。
また、各関数についてカバレッジの概要が報告されます。たとえば、基本的なブロックと命令のカバレッジ比を示しています。
特定の関数については、CFGやスーパーブロックドミネーターグラフなどのさまざまなプログラムグラフを選択的にダンプすることができます。たとえば、 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}
}
このソフトウェアは、MITライセンスの下で配布されます。詳細については、 LICENSE.txt参照してください。