控制流分析-自然循环识别

本文介绍了基本块的概念,以及如何通过控制流图(CFG)和控制树来识别程序中的循环结构。文中详细阐述了控制关系的性质,并举例说明了如何判断回边以确定循环的存在。同时,讨论了自然循环的识别标准,强调了入口点的唯一性在确定循环范围中的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本块:

在这里插入图片描述
识别基本块:
在这里插入图片描述
例子,下面第一个红色到第二个红色(不包括)之间的都是一个基本块。一共4个。
在这里插入图片描述
从而可以绘制控制流图。

控制流图

在这里插入图片描述
控制节点的概念,比如2是3的控制,且是真控制,且是直接控制
在这里插入图片描述
控制关系的性质:
在这里插入图片描述
在这里插入图片描述
上面的s是开始的那个基本块,即程序开始的地方。


有了上述的控制的概念,有假设有如下的控制流图。我们可以画出控制树。
在这里插入图片描述

控制树

在这里插入图片描述
有了控制流图和控制树,我们可以识别一些循环。
有如下发现。

回边

在这里插入图片描述
进一步要求:
在这里插入图片描述

自然循环识别

例如对于,下面的控制流图,(6,6)是回边,因为6控制6。所以{6}是一个循环。
4控制着{4,5,6,7},有回边(7,4),且满足入口点唯一,是4。所以也是循环。
{2,3,4}不是循环,为什么?
2控制{3,4},但是入口节点不唯一,因为可能会从4开始进入循环。所以应该扩大循环范围{2,3,4。。。}。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

音程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值