一句话:提出基于路径分歧概率的随机异步调度策略,提升混合执行测试的代码覆盖率。
混合执行(concolic execution)是强大的路径探索技术,但路径约束求解仍是主要瓶颈,因此输入/分支调度至关重要。现有最先进引擎采用的 branch-flipping 策略存在局限。本文提出从全局视角评估每个分支带来新代码覆盖的潜力,并考虑该分支处的路径分歧概率,据此设计随机异步调度策略。作者实现了原型工具 Marco,在来自 Google Fuzzbench、Binutils 和 UniBench 的 30 个真实程序上与最先进的混合执行器进行对比。结果表明 Marco 能超越基线方法,并在基线终止后仍持续取得进展。
Concolic execution is a powerful program analysis technique for code path exploration. Despite recent advances that greatly improved the efficiency of concolic execution engines, path constraint solving remains a major bottleneck of concolic testing. An intelligent scheduler for inputs/branches becomes even more crucial. Our studies show that the previously under-studied branch-flipping policy adopted by state-of-the-art concolic execution engines has several limitations. We propose to assess each branch by its potential for new code coverage from a global view, concerning the path divergence probability at each branch. To validate this idea, we implemented a prototype Marco and evaluated it against the state-of-the-art concolic executor on 30 real-world programs from Google's Fuzzbench, Binutils, and UniBench. The result shows that Marco can outperform the baseline approach and make continuous progress after the baseline approach terminates.