控制流分析(Control Flow Analysis)

article/2025/9/3 9:07:21

控制流(Control Flow):操作的序列

控制流分析(Control Flow Analysis):通过分析程序去发现每一过程内控制流层次结构。

控制流分析的原因

  • 控制流分析(CFA)能够帮助我们理解控制流图(control-flow graphs,CFG)的结构
  • 能够确定控制流图中的循环结构
  • 通过CFA获得的必经结点信息,为代码动作形成条件
  • SSA形式的构造
  • 通过CFA获得区间结构,来实现数据流分析
  • 寻找在并行化中所需要的控制依赖

控制流分析的方法

确定构造过程的基本块构造CFG,有如下两种途径:

  • 使用必经结点来找出循环,并为优化简单地标识出它所找到的循环
  • 区间分析(成熟变体:结构分析(对例程中的每一种控制流结构进行分类))

基本块

1、基本块(basic block):

一个只能从第一条指令进入,最后一条指令离开的最长指令序列。

2、构建基本块

先确定首领(leader):基本块的第一条指令

  1. 例程的入口点,或
  2. 分支的目标,或
  3. 直接紧跟在分支指令或返回指令之后的所有指令

3、构建基本块的算法

Input: List of n instructions(instr[i]=ith instruction)
Output: Set of leaders & list of basic blocks(block[x] is block with leader x)//第一条指令是领导
leaders = {1}
for i = 1 to n  //找到所有的领导if instr[i] is a branchleaders = leaders U set of potential targets of instr[i]
for each xleadersblock[x] = {x}i = x + 1     //补足第x个基本块while i<=n and ileadersblock[x] = block[x] {i}i = i + 1

控制流图(CFG)

1、定义:有向图

 

注意:entry,exit基本块不是实质性的,引入是为了算法的描述简单

2、构造过程

  • 每一个CFG节点代表一个基本块
  • 节点i到j有边,若
  1. 基本块i的最后一条语句分支跳转到块j的第一条语句,或者
  2. 块i不是以无条件分支结束且块j直接跟在其后面

3、从基本块构造CFG算法

Input:A list of m basic blocks(block)
Output:A CFG where each node is a basic blockfor i = 1 to nx = last instruction of block[i]if instr x is a branchfor each target(to block j)of instr xcreate an edge from block i to block jif instr x is not an unconditional branchcreate an edge from block i to block i+1

例子(鲸书中的):

扩展基本块

1、扩展基本块(extended basic block):

从一个首领开始的最长指令序列,在这个指令序列中,除了第一个结点之外不含其他汇合结点

  • 只有一个入口且可能有多个出口(可看作以入口基本块为根的一棵树)
  • 某些局部优化(如指令调度)在扩展基本块上更加有效

2、算法

对以r为根的扩展基本块,构造其内诸基本快的索引集合

全局变量EbbRoots记录扩展基本块的根基本块

procedure Build_Ebb(r,Succ,Pred)
{Ebb = {}Add_Bbs(r,Ebb,Succ,Pred)return Ebb
}procedure Add_Bbs(r,Ebb,Succ,Pred)
{Ebb = Ebb{r}for each xSucc(r) doif |Pred(x)|=1& xEbb thenAdd_Bbs(x,Ebb,Succ,Pred)else if xEbbRoots thenEbbRoots = EbbRoots{x}
}

 


http://chatgpt.dhexx.cn/article/JooHtpOd.shtml

相关文章

程序流图画法详解

程序流图一般是软件评测师考试中的第一道大题&#xff0c;同时也是必考大题&#xff0c;多层嵌套的循环程序绘制流程图时十分繁琐&#xff0c;本人在经过练习真题以及查阅资料后有了一些绘制控制流图的小经验&#xff0c;如有不对请指出。下面以2017年的软件评测师下午第一套真…

对Python控制流图(Control Flow Graph)-(CFG)的一些探索

对Python控制流图&#xff08;Control Flow Graph&#xff09;-&#xff08;CFG&#xff09;的一些探索 粗浅的了解 1.定义 控制流图(Control Flow Graph, CFG)也叫控制流程图&#xff0c;是一个过程或程序的抽象表现&#xff0c;是用在编译器中的一个抽象数据结构&#xff…

中间表示- 控制流图

基本概念 基本块&#xff1a;是语句的一个序列&#xff0c;从第一条执行到最后一条 不能从中间进入&#xff0c;不能从中间退出&#xff0c;即跳转指令只能出现在最后 控制流图&#xff1a;控制流图是一个有向图G(V&#xff0c;E) 节点V&#xff1a;是基本块边E&#xff1a…

控制流图分类

The if Statement if (x < y) {y 0;x x 1; } else {x y; } if (x < y) {y 0;x x 1; } The if-return Statement if (x < y) {return; } print (x); return; 注意&#xff1a;2到3 没有边 while and for Loops x 0; while (x < y) {y f (x, y);x x …

【浅析】程序分析中的数据流图(data flow graph)和控制流图(control flow graph)

文章目录 前言1、data flow graphs2、Control Flow Graph小结 前言 创作开始时间&#xff1a;2021年4月9日09:17:11 如题。看了一些网页文献&#xff0c;大概对这两种流图有了一定的理解&#xff0c;这里简单地记录一下&#xff0c;尤其是一些例子&#xff0c;感觉比较直观。…

软件测试之控制流图以及环形复杂度独立路径求解问题

首先需要明确的是&#xff0c;控制流图并不等于流程图&#xff0c;可以理解为控制流图的出现是为了后续的环形复杂度的计算和写出独立路径和配以相应的测试用例。 所以控制流图是核心&#xff0c;画图的时候务必谨慎再谨慎&#xff0c;要不然可能你后面的全部崩盘。 控制流图考…

【程序分析】函数调用图 | 控制流图 | 过程间控制流图 | 数据流图 | 值流图

CG&#xff08;call graph&#xff09;和CFG&#xff08;control-flow graph&#xff09;都是表示程序控制流的有向图。 1 函数调用图&#xff1a;CG&#xff08;call graph&#xff09; 一个CG是表示整个程序中方法&#xff08;函数&#xff09;之间调用关系的图&#xff0c…

LLVM CFG/DFG控制流图和数据流图可视化

1.引言 由于最近在学习数据流分析的相关知识&#xff0c;记录一下利用LLVM生成CFG和DFG的学习过程&#xff0c;参考文献和网址放在文章末尾。 2.实验环境 操作系统&#xff1a;Ubuntu 20.04.3 LTS 64bit&#xff1b; 硬件设备&#xff1a;Intel Celeron(R) CPU N34…

控制流图、圈复杂度

继续上次的测试作业&#xff0c;学习完程序插装的概念&#xff0c;今天学习测试的静态分析方法&#xff1a;绘制控制流图与计算圈复杂度。 一、控制流图&#xff1a; 一个过程或程序的抽象表现&#xff0c;常以数据结构链的形式表示。 二、圈复杂度&#xff1a; 复杂度越高&…

软件评测师必考题-控制流图

控制流图的基本知识 首先我们得清楚控制流图中的几个判断循环是如何表示的&#xff1a; 判断节点的嵌套 清楚了上面表示方法&#xff0c;你还是很难画出复杂的控制流图&#xff0c;而软考的控制流图往往是2个或多个判断节点嵌套在一起。其实只要把嵌套的节点想象成被嵌套节点…

软件中级-控制流图基本知识

软件中级-控制流图基本知识 什么是控制流图&#xff1f; 控制流图(Control Flow Graph, CFG)也叫控制流程图&#xff0c;是一个过程或程序的抽象表现&#xff0c;是用在编译器中的一个抽象数据结构&#xff0c;代表了一个程序执行过程中会遍历到的所有路径。 控制流图中包含…

程序控制流图

基本符号 ps&#xff1a;请将线看成弧线[doge] 顺序结构 if选择结构 while循环结构 case多分支结构 控制流图由节点和控制流线&#xff08;弧&#xff09;两种符号组成。 结点以标有编号的圆圈表示&#xff0c;用于表示程序流程图中矩形框、菱形框的功能&#xff0c;是一…

控制流图怎么画

一、什么是控制流图&#xff1f; 控制流图(Control Flow Graph, CFG)也叫控制流程图&#xff0c;是一个过程或程序的抽象表现&#xff0c;是用在编译器中的一个抽象数据结构&#xff0c;由编译器在内部维护&#xff0c;代表了一个程序执行过程中会遍历到的所有路径。它用图的形…

软工——各种图

目录 一.因果图二.控制流图三.程序流程图四.数据流图数据流数据流图的画法&#xff1a;由简入繁父图子图平衡保持数据守恒数据字典 五.N-S盒图六.PAD盒图七.操作状态图八.用例图、活动图、顺序图九.类图十.Jackson图十一.IPO图 一.因果图 因果图法&#xff1a;是一种利用图解法…

软件测试之控制流图

为了应对软件工程考试&#xff0c;本文对控制流图常见考法进行整理&#xff0c;主要是针对软件评测师的题型来整理。 什么是控制流图 控制流图是一个过程或程序的抽象表现&#xff0c;常以数据结构链的形式表示。简称流图&#xff0c;是对程序流程图进行简化后得到的&#xf…

控制流图(Control Flow Graph)-(CFG)

1.定义 百度百科&#xff1a; 控制流图(Control Flow Graph, CFG)也叫控制流程图&#xff0c;是一个过程或程序的抽象表现&#xff0c;是用在编译器中的一个抽象数据结构&#xff0c;由编译器在内部维护&#xff0c;代表了一个程序执行过程中会遍历到的所有路径。它用图的形式…

【大学生软件测试基础】白盒测试 - 控制流图 - 01

任务1、画出程序流程图&#xff1b; 任务2、画出控制流图&#xff1b; 任务3、根据程序环形复杂度的计算公式&#xff0c;求出程序路径集合中的独立路径数目&#xff1b; 任务4、根据环形复杂度的计算结果&#xff0c;源程序的基本路径集合中有多少条独立路径&#xff1b; …

控制流图(Control Flow Graph, CFG)

The if Statement if (x < y) {y 0;x x 1; } else {x y; } if (x < y) {y 0;x x 1; } The if-return Statement if (x < y) {return; } print (x); return; 注意&#xff1a;2到3 没有边 while and for Loops x 0; while (x < y) {y f (x, y);x x …

C语言之美——平方根倒数快速计算

C语言之美——平方根倒数快速计算 前言 由于特殊原因&#xff0c;陆陆续续接触陀螺仪很长一段时间&#xff0c;对于各种解析算法的运算速率有了切身体会&#xff0c;不断追求更快、更准。最近&#xff0c;发现了一份比较特殊的平方根倒数速算法&#xff0c;一下子来了兴趣&am…

【C语言求素数(质数)的三种方法】

失踪人口回归&#xff0c;假期因为太懒&#xff0c;刚开学的这几天又真的忙&#xff0c;所以好长时间没有发文章了&#xff0c;马上我们要进行C语言考试了&#xff0c;我发现学的东西好多都不太懂&#xff0c;所以慢慢要在进行一次复习了&#xff1b;上周数据结构课上老师让写程…