arXivDaily arXiv每日学术速递 周一至周五更新
arXiv 2408.01909cs.SE
收藏

将符号执行扩展到大型软件系统

Scaling Symbolic Execution to Large Software Systems

Gabor Horvath, Reka Kovacs, Zoltan Porkolab

AI总结:

本文以 Clang Static Analyzer 和 CodeChecker 为核心,系统阐述如何通过运行时间与内存优化、误报抑制、增量分析及持续集成等方法,实现符号执行在大规模软件系统中的端到端可扩展性。

摘要:

静态分析是在不执行程序的情况下对程序进行分析,通常由自动化工具完成。符号执行是一种流行的静态分析技术,既用于程序验证,也用于缺陷检测软件。它的工作方式是解释代码,为编译时未知的每个值(例如用户给定的输入)引入一个符号,并以符号方式进行计算。分析引擎努力同时探索多条执行路径,尽管由于可能性数量巨大,检查所有路径是一个难以处理的问题。我们重点关注一个名为 Clang Static Analyzer 的错误查找框架,以及围绕它构建的名为 CodeChecker 的基础设施。重点是实现端到端的可扩展性。这包括分析的运行时间和内存消耗、向用户呈现缺陷、自动误报抑制、增量分析、结果中的模式发现以及在持续集成循环中的使用。我们还概述了有关这些工具的未来方向和未解决的问题。虽然关于程序验证软件已有丰富的文献,但错误查找工具通常只能依赖于针对个别技术的综述论文。在本文中,我们不仅讨论了个别方法,还讨论了这些决策如何相互作用并相互强化,从而创建一个大于其各部分之和的系统。尽管 Clang Static Analyzer 只能处理 C 语言家族,但本文介绍的技术大多是语言无关的,适用于其他类似的静态分析工具。

英文摘要:

Static analysis is the analysis of a program without executing it, usually carried out by an automated tool. Symbolic execution is a popular static analysis technique used both in program verification and in bug detection software. It works by interpreting the code, introducing a symbol for each value unknown at compile time (e.g. user-given inputs), and carrying out calculations symbolically. The analysis engine strives to explore multiple execution paths simultaneously, although checking all paths is an intractable problem, due to the vast number of possibilities. We focus on an error finding framework called the Clang Static Analyzer, and the infrastructure built around it named CodeChecker. The emphasis is on achieving end-to-end scalability. This includes the run time and memory consumption of the analysis, bug presentation to the users, automatic false positive suppression, incremental analysis, pattern discovery in the results, and usage in continuous integration loops. We also outline future directions and open problems concerning these tools. While a rich literature exists on program verification software, error finding tools normally need to settle for survey papers on individual techniques. In this paper, we not only discuss individual methods, but also how these decisions interact and reinforce each other, creating a system that is greater than the sum of its parts. Although the Clang Static Analyzer can only handle C-family languages, the techniques introduced in this paper are mostly language-independent and applicable to other similar static analysis tools.

机构、总结、中文摘要均由AI分析而来,可能存在错误,请以论文正文为准。

↑