程序分析技术理解(一)

1.基本块(Basic Block)和流图(flow graph)

将一段程序划分为基本块(Basic Block BB),每个基本块满足以下条件:

        a) 控制流只能从基本块的第一个指令进入;

        b)除了基本块的最后一条指令,控制流在离开基本块前不会停止或跳转。

构造基本块的详细条件:

        1)每一个基本块只有一个入口一个出口;

                a)可能是入口的几种情况:

                        程序的第一个语句

                        跳转的目标语句

                        条件跳转的下一条语句

                b)可能是出口的几种情况:

                       停机语句

                        跳转语句

                        跳转目标语句的前一个语句

构建基本块的算法:

1. 确定程序的leaders(就是确定基本块的入口):

  • 程序的第一条指令是一个leader;
  • 有条件或无条件跳转的目标指令是leaders;(如果不是则会有两个入口)
  • 任何紧跟在有条件和无条件跳转之后的指令是leaders。(如果不是则会有两个出口)   
  • BB由一条leader及其所有后续指令组成,直到下一条leader。

例子:

程序的第一条指令是x=input,所以它是leader;

有条件或无条件跳转的目标指令 a= q,return,z = x*y是leader

任何紧跟在有条件或无条件跳转之后的指令p = x/y,goto B2是leader

最后,BB由一条leader及其所有后续指令组成,直到下一条leader。

例子:

流图是由一个个基本块构建的,流图的边表示了哪些基本块可能在一个基本块之后执行:上述图例也表示一个流图。

在程序被划分为基本块后,将基本块视为一个基本单元节点,基本块之间在程序执行流程上互为前驱和后继关系,可视为两个基本块之间是一个有向图,称为控制流图(control flow Graph,CFG)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值