NoCFG:一种轻量级的声音调用图近似方法
NoCFG: A Lightweight Approach for Sound Call Graph Approximation
摘要:
过程间分析指的是收集关于整个程序的信息,而不是像过程内分析那样只收集单个过程的信息。过程间分析可以进行更精确的分析;然而,由于难以构建精确的程序调用图,因此它很复杂。目前用于构建合理和精确的调用图的算法分析复杂的程序依赖关系,因此它们可能难以扩展。它们的复杂性源于它们使用的类型推理分析,特别是使用了指向分析的一些变体。为了解决这个问题,我们提出了NoCFG,一个新的声音和可扩展的方法近似的调用图,支持各种各样的程序设计语言。NoCFG的一个关键属性是它对程序进行粗略的抽象,丢弃了许多程序设计语言的构造。由于粗糙的程序抽象,扩展它以支持其他语言是很容易的。我们为NoCFG的可靠性提供了正式的证明,并对用Python和C#编写的真实项目进行了评估。实验结果证明了90%的高准确率(下限)和可扩展性,通过安全用例超过200万行代码的项目。
英文摘要:
Interprocedural analysis refers to gathering information about the entire program rather than for a single procedure only, as in intraprocedural analysis. Interprocedural analysis enables a more precise analysis; however, it is complicated due to the difficulty of constructing an accurate program call graph. Current algorithms for constructing sound and precise call graphs analyze complex program dependencies, therefore they might be difficult to scale. Their complexity stems from the kind of type-inference analysis they use, in particular the use of some variations of points-to analysis. To address this problem, we propose NoCFG, a new sound and scalable method for approximating a call graph that supports a wide variety of programming languages. A key property of NoCFG is that it works on a coarse abstraction of the program, discarding many of the programming language constructs. Due to the coarse program abstraction, extending it to support also other languages is easy. We provide a formal proof for the soundness of NoCFG and evaluations for real-world projects written in both Python and C#. The experimental results demonstrate a high precision rate of 90% (lower bound) and scalability through a security use-case over projects with up to 2 million lines of code.
机构、总结、中文摘要均由AI分析而来,可能存在错误,请以论文正文为准。