Инструмент для эффективного анализа покрытия двоичного уровня. BCOV Статические инструменты x86-64 ELF Binary без поддержки компилятора. Он включает обрезку зонда, точный анализ CFG и сложные методы инструментов. Мы суммировали это исследование в 2-минутном видеорочном видео.
bcov доступен здесь. Тем не менее, полный набор критериев доступен в нашем репозитории архив. Должны быть доступны следующие программные пакеты:
next Commit #C3B4CE1901master филиал Unicorn Commit #536C4E77C4 Более поздние версии обеих рамок должны работать в принципе, но еще не были проверены. Script install.sh можно использовать для установки.
Мы предоставляем DockerFile, который устанавливает BCOV и проводит эксперимент по анализу покрытия. Пожалуйста, проверьте дополнительные артефакты для получения более подробной информации.
Инструмент поддерживает следующие режимы работы, которые устанавливаются с использованием параметра --mode (или просто -m ):
patch . Установить данный бинарный.report . Покрытие отчета с учетом файла данных и файла данных о покрытии.dump . Сбросить различные графики программы для данной функции. Например, сбросьте деревья CFG и Dominator.Следующая команда может быть выдана для исправления бинарного,
bcov -m patch -p any -v 5 -i perl -o perl.any Политика инструментов может быть установлена на any , что относится к политике любого узла или all , что относится к политике листового узла.
Данные охвата могут быть сброшены путем инъекции libbcov-rt.so с использованием механизма LD_PRELOAD . Например, вы можете попробовать выборку бинарного 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 File.out. Данные в каждой строке списки:
Кроме того, для каждой функции сообщается сводка покрытия. Например, он показывает основные коэффициенты покрытия блоков и инструкций.
Для данной функции можно выборочно сбрасывать различные графики программ, такие как график CFG и Superblock Dominator. Например, рассмотрим функцию S_search_const в perl ,
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 для деталей.