数据流分析

数据流分析 是一种用于收集计算机程序在不同点计算的值的信息的技术。

基本原理

数据流分析试图获得程序中每一点的特定信息。通常,在基本块的界限内就可以获得这些信息,因为很容易计算基本块中的信息。在前向流分析(forward flow analysis)中,一个块的结束状态是这个块起始状态的一个函数。函数由块内的语句的影响信息组成。一个块的开始状态是它的前驱的结束状态的函数。这就产生了一系列的数据流方程:

对于每一个块$b:$

$$ out_b = trans_{b}(in_b) $$
$$ in_b = join_{p \in pred_b}(out_p) $$

在这里,$trans_b$ 是块 $b$ 的 转移函数。它作用于入口状态$in_b$,并产生出口状态$out_b$。连接运算符 $join$ 将块 $b$ 的前驱节点 $p \in pred_b$ 的出口状态联合起来,产生入口状态 $b$。

在求解这一系列方程之后,块的入口和出口状态可以被用来获得程序在块内的属性。每条语句的转移函数可以被分别的用于获得在一个基本块内的某一点的信息。

参考链接

  1. 数据流分析,by wikipedia.