一句话:CGADI 将抽象推迟到参数化安全性质触发时,使系统化抽象框架能在部分执行中保持完全精确而不失可计算性。
系统化抽象框架通过先验抽象诱导执行空间的有限化来保证可计算性,但这种抽象不考虑程序结构,对每个程序点施加统一的上下文敏感度。本文提出 CGADI,一种基于定义式解释器的系统化抽象框架增强:它将抽象推迟,直到某个参数化安全性质发出应当抽象的 сигнал。作者以两种安全性质实例化该框架:检测非递归执行部分的简单重入性质,以及检测因值适当递减而注定收敛的求值路径的 size change 性质。由此,CGADI 能在部分执行中运行于完全精确的具体空间而不牺牲可计算性。评估表明,与对应的 CFA 相比,CGADI 能以较低代价产生更多精确结果,且无需特殊处理即可处理许多通常需要专门分析技术才能应对的程序模式。
Over the last 15 years, several popular systematic abstraction frameworks have emerged—frameworks that allow a static analysis to be derived by systematically transforming a concrete semantics. These frameworks guarantee computability of the resulting artifact by the application of an a priori abstraction which induces a particular finitization in the execution space. While effective, this abstraction occurs without regard for program structure, subjecting each program point to the same fixed degree of context sensitivity. In this paper, we present CGADI, an enhancement to systematic abstraction frameworks based on definitional interpreters which defers abstraction until a parameterized safety property signals that it should be applied. We then examine this enhanced framework instantiated with two such safety properties: a simple reentrancy property which detects non-recursive portions of program execution, and a size change property which detects evaluation paths destined to converge by virtue of appropriately decreasing values along them. The result is that CGADI can operate in the fully-precise concrete space for portions of execution without forfeiting computability. Our evaluation demonstrates that CGADI is able to produce a higher number of precise results than a corresponding CFA at relatively low cost and that, with no special treatment, CGADI can handle many programming patterns targeted by specific analysis techniques.