Skip to main content
QUICK REVIEW

[论文解读] Pushdown Control-Flow Analysis of Higher-Order Programs

Christopher Earl, Matthew Might|arXiv (Cornell University)|Jul 24, 2010
Formal Methods in Verification参考文献 19被引用 35
一句话总结

本文通过将具有无界栈的CESK机器进行抽象,提出了一种用于高阶程序的栈式控制流分析(PDCFA)框架,实现了精确的多变体分析,避免了返回流合并。关键贡献在于:通过PDA构造与CFL可 reachability 技术,提出了一种可判定的、时间复杂度为多项式的基于栈的控制流分析方法,实现了高精度与高效率的统一。

ABSTRACT

Context-free approaches to static analysis gain precision over classical approaches by perfectly matching returns to call sites---a property that eliminates spurious interprocedural paths. Vardoulakis and Shivers's recent formulation of CFA2 showed that it is possible (if expensive) to apply context-free methods to higher-order languages and gain the same boost in precision achieved over first-order programs. To this young body of work on context-free analysis of higher-order programs, we contribute a pushdown control-flow analysis framework, which we derive as an abstract interpretation of a CESK machine with an unbounded stack. One instantiation of this framework marks the first polyvariant pushdown analysis of higher-order programs; another marks the first polynomial-time analysis. In the end, we arrive at a framework for control-flow analysis that can efficiently compute pushdown generalizations of classical control-flow analyses.

研究动机与目标

  • 解决有限状态控制流分析中返回流合并的根本问题,该问题会导致虚假的跨过程路径并产生不精确的结果。
  • 克服经典上下文敏感分析(如0CFA)的局限性,后者依赖于有限的上下文栈,不可避免地会合并返回流信息。
  • 设计一种框架,能够无限期地保留基于栈的返回上下文,从而在不牺牲可判定性的前提下,实现对高阶程序的精确分析。
  • 实现多变体精度与多项式时间复杂度——解决先前方法(如CFA2)的缺陷,后者为单变体且时间复杂度为指数级。
  • 通过将抽象机器建模为下推自动机(PDA)并利用CFL可 reachability 技术回答可达性查询,提供一种可判定且可扩展的控制流分析方法。

提出的方法

  • 通过限制存储空间但保持栈(延续)未抽象化,对A-正规形式lambda-微积分的底层CESK机器进行抽象,从而得到一个无限状态系统。
  • 构建CESK机器的抽象解释,通过Dyck状态图追踪控制状态,表示合法的控制流转换序列。
  • 将抽象化的CESK机器转化为一个识别合法控制状态序列语言的下推自动机(PDA)。
  • 使用CFL可 reachability 技术——具体而言,将PDA的语言与表示目标状态配置的正则语言相交——以判定可达性并回答控制流查询。
  • 通过优化PDA构造过程并利用ε-闭包与状态图压缩技术,将最坏情况下的时间复杂度从双重指数级降低至多项式级。
  • 引入分析的多变体版本,通过追踪不同的调用上下文,实现比单变体方法更高的精度。

实验结果

研究问题

  • RQ1能否通过保留无界栈上下文,利用栈式控制流分析在高阶程序中消除返回流合并?
  • RQ2是否可能设计一种对高阶程序可判定的控制流分析方法,使其在多项式时间内运行,同时保持多变体精度?
  • RQ3如何利用下推自动机与上下文无关语言技术,对具有无界栈的高阶程序中的控制流进行建模与推理?
  • RQ4对具有无界栈的CESK机器进行抽象解释,能否产生一种可判定且高效的控制流分析框架?
  • RQ5栈式控制流分析与现有技术(如CFA2)之间存在何种关系?它如何克服后者在精度与性能方面的局限性?

主要发现

  • 所提出的栈式控制流分析框架通过将程序栈建模为无界栈式系统,实现了精确的多变体分析,彻底消除了返回流合并。
  • 该分析是可判定的,因为其可达性查询被归约为PDA语言与正则语言交集的非空性检查,而该问题是可判定的。
  • 通过构建Dyck状态图并应用CFL可 reachability 技术,该方法实现了高效的分析,其最坏时间复杂度为O(n⁶)(在单变体情况下)。
  • 该框架支持单变体与多变体精度,其中多变体版本是首个针对高阶程序的多变体栈式分析。
  • 该方法在最佳情况下实现了多项式时间复杂度,标志着首个针对高阶程序的多项式时间栈式控制流分析。
  • 该方法通过保留基于栈的返回上下文,推广了经典控制流分析,实现了比有限状态抽象更精确的控制流与数据流追踪。

更好的研究,从现在开始

从论文设计到论文写作,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。