효율적인 이진 수준 범위 분석을위한 도구. BCOV 정적으로 계측기 X86-64 컴파일러 지원이없는 ELF Binaries. 프로브 가지 치기, 정확한 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 주입하여 커버리지 데이터를 덤프 할 수 있습니다. 예를 들어, 아티팩트 리포지토리에서 찾을 수있는 샘플 바이너리 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}
}
이 소프트웨어는 MIT 라이센스에 따라 배포됩니다. 자세한 내용은 LICENSE.txt 참조하십시오.