论文标题
有效的二进制覆盖范围分析
Efficient Binary-Level Coverage Analysis
论文作者
论文摘要
代码覆盖分析在软件测试过程中起着重要作用。最近,覆盖范围反馈的显着效果引发了人们对反馈引导的模糊的广泛兴趣。在这项工作中,我们介绍了BCOV,这是一种用于二进制级别覆盖范围分析的工具。我们的工具静态工具X86-64二进制文件,无需编译器支持。我们实施了几种技术,以提高效率并扩展到大型现实世界软件。首先,我们将Agrawal的探针修剪技术带入二元级别的仪器,并有效利用其超块来减少开销。其次,我们介绍了切片的微执行,这是一种可用于跳台分析的强大技术,可提高CFG的精度并使我们能够仪器跳台条目。此外,X86-64中的较小说明对插入绕道提出了挑战。为了应对这一挑战,我们积极利用填充字节,并系统地托管相邻的基本块中的绕道。我们通过八个受欢迎且经过良好测试的套件(例如FFMPEG和LLVM)编制的95个二进制文件的BCOV评估BCOV。两种具有不同边缘精度的仪器策略用于修补该语料库中的所有功能 - 超过160万个功能。我们的确切政策的平均绩效和内存开销分别为14%和22%。仪器二进制文件不会引入任何测试回归。报告的覆盖范围非常准确,平均F评分为99.86%。最后,我们的跳台分析与IDA Pro在GCC二进制方面的分析相当,并且在Clang Binaries上表现优于它。
Code coverage analysis plays an important role in the software testing process. More recently, the remarkable effectiveness of coverage feedback has triggered a broad interest in feedback-guided fuzzing. In this work, we introduce bcov, a tool for binary-level coverage analysis. Our tool statically instruments x86-64 binaries in the ELF format without compiler support. We implement several techniques to improve efficiency and scale to large real-world software. First, we bring Agrawal's probe pruning technique to binary-level instrumentation and effectively leverage its superblocks to reduce overhead. Second, we introduce sliced microexecution, a robust technique for jump table analysis which improves CFG precision and enables us to instrument jump table entries. Additionally, smaller instructions in x86-64 pose a challenge for inserting detours. To address this challenge, we aggressively exploit padding bytes and systematically host detours in neighboring basic blocks. We evaluate bcov on a corpus of 95 binaries compiled from eight popular and well-tested packages like FFmpeg and LLVM. Two instrumentation policies, with different edge-level precision, are used to patch all functions in this corpus - over 1.6 million functions. Our precise policy has average performance and memory overheads of 14% and 22% respectively. Instrumented binaries do not introduce any test regressions. The reported coverage is highly accurate with an average F-score of 99.86%. Finally, our jump table analysis is comparable to that of IDA Pro on gcc binaries and outperforms it on clang binaries.