鲸书阅读笔记-------第八章数据流分析(一):基本块和流图

一、什么是数据流分析?

数据流分析指的是一组用来获取有关数据如何沿着程序执行路径流动的相关信息的技术。

目的:提供一个过程(或一大段程序)如何操作其数据的全局信息。

二、基本概念

1.基本块

形式上,基本块是一个只能从它的第一条指令进入,并从最后一条指令离开的最长的指令序列。

基本块的构建:已第一条指令作为一个新的基本块的开始,然后不断把后续的指令加进去,直到碰到一个无条件跳转、条件跳转指令或者下一个指令前面的标号(首指令的前一个)为止。

首指令的选择规则

1)第一条指令

2)任意一个条件或者无条件的转移指令的目标指令

3)紧跟在一个条件或者无条件转移指令之后的指令

2.流图

      标识了基本块之后,使用含有节点集合和边集合(控制流)的有根的有向图来刻画过程的控制流。图中每一个节点代表一个基本块,外加两个不同的节点(entry和exit)。边集合中的边连接一个基本块到其他基本块。

3.示例

鲸书阅读笔记-------第八章数据流分析(一):基本块和流图鲸书阅读笔记-------第八章数据流分析(一):基本块和流图

鲸书阅读笔记-------第八章数据流分析(一):基本块和流图鲸书阅读笔记-------第八章数据流分析(一):基本块和流图

4.必经节点

概念:如果从entry到B的每一条路径都包含A,则流图中结点A是结点B的必经结点。

可以使用必经结点来标识循环。流图的回边(back edge)是这样一条边, 其头是其尾的必经结点的边。

一个循环满足下述条件的所有结点组成:循环的入口结点是所有这些结点的必经结点,所有这些结点都可以到达入口结点,而且其内只有一条回边。上述例子中:B4和B6形成了一个循环,其中B4是循环的入口结点。

鲸书阅读笔记-------第八章数据流分析(一):基本块和流图