一句话:提出具体约束引导的符号执行,通过引导路径探索覆盖未覆盖的具体分支,缓解路径爆炸并提升代码覆盖率。
符号执行能系统探索程序可行路径,但路径爆炸严重限制其可扩展性。现有缓解方法主要依据程序状态特征选择待探索状态。本文提出具体约束引导的符号执行,其核心观察是:符号执行通常致力于覆盖所有符号分支,却忽视具体分支;将探索导向未覆盖的具体分支有望提升整体代码覆盖率。作者将该方法用于增强 KLEE,并在 10 个开源 C 程序上评估。实验表明,该方法能提高 KLEE 的代码覆盖能力,并发现更多安全违规。
Symbolic execution is a popular program analysis technique. It systematically explores all feasible paths of a program but its scalability is largely limited by the path explosion problem, which causes the number of paths proliferates at runtime. A key idea in existing methods to mitigate this problem is to guide the selection of states for path exploration, which primarily relies on the features to represent program states. In this paper, we propose concrete constraint guided symbolic execution, which aims to cover more concrete branches and ultimately improve the overall code coverage during symbolic execution. Our key insight is based on the fact that symbolic execution strives to cover all symbolic branches while concrete branches are neglected, and directing symbolic execution toward uncovered concrete branches has a great potential to improve the overall code coverage. The experimental results demonstrate that our approach can improve the ability of KLEE to both increase code coverage and find more security violations on 10 open-source C programs.