Uma ferramenta para análise de cobertura eficiente de nível binário. BCOV Instrumentos estaticamente x86-64 Binários de elfo sem suporte do compilador. Possui poda de sonda, análise precisa do CFG e técnicas sofisticadas de instrumentação. Resumimos esta pesquisa em um vídeo teaser de 2 minutos.
bcov está disponível aqui. No entanto, o conjunto completo de benchmarks está disponível em nosso repositório de arquivo. Os seguintes pacotes de software devem estar disponíveis:
next Commit #C3B4CE1901master do Ramo Unicorn #536C4E77C4 As versões posteriores de ambas as estruturas devem funcionar em princípio, mas ainda não foram testadas. O script install.sh pode ser usado para instalação.
Fornecemos um DockerFile que instala o BCOV e executa um experimento de análise de cobertura. Verifique os artefatos suplementares para obter mais detalhes.
A ferramenta suporta os seguintes modos de operação que são definidos usando a opção --mode (ou simplesmente -m ):
patch . Patch um determinado binário.report . Cobertura do relatório, dada um binário corrigido e um arquivo de dados de cobertura.dump . Despeje vários gráficos de programas para uma determinada função. Por exemplo, despeje as árvores CFG e Dominator.O seguinte comando pode ser emitido para corrigir um binário,
bcov -m patch -p any -v 5 -i perl -o perl.any A política de instrumentação pode ser definida como any , que se refere à política de qualquer nó, ou all o que se refere à política de nós foliares.
Os dados de cobertura podem ser despejados injetando libbcov-rt.so usando o mecanismo LD_PRELOAD . Por exemplo, você pode experimentar a amostra binária perl.any que possa ser encontrado no repositório de artefatos,
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" 'Isso produzirá um arquivo de despejo que possui a extensão '.bcov' no seu diretório atual. Este arquivo pode ser fornecido ao BCOV para relatórios de cobertura,
bcov -m report -p any -i ./perl -d perl.any.1588260679.1816.bcov > report.out Atualmente, o BCOV não pode persistir resultados de análise no disco. Portanto, o binário original deve ser re-analisado para relatar a cobertura. A cobertura será relatada para cada bloco básico no report.out do arquivo. Os dados em cada linha listas:
Além disso, um resumo de cobertura é relatado para cada função. Por exemplo, mostra os índices básicos de cobertura de bloco e instrução.
Para uma determinada função, é possível despejar seletivamente vários gráficos de programas, como o gráfico CFG e Superblock Dominator. Por exemplo, considere a função S_search_const em perl ,
bcov -m dump -f " S_search_const " -i ./perlEste comando despejará os seguintes arquivos:
Os gráficos são despejados no formato de ponto padrão e podem ser visualizados usando um visualizador de pontos como xdot . Consulte esta postagem do blog para obter detalhes adicionais.
Para citação em um trabalho acadêmico, use:
@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}
}
Este software é distribuído sob a licença do MIT. Consulte LICENSE.txt para obter detalhes.