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

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

粗浅的了解

1.定义

控制流图(Control Flow Graph, CFG)也叫控制流程图,是一个过程或程序的抽象表现,是用在编译器中的一个抽象数据结构,由编译器在内部维护,代表了一个程序执行过程中会遍历到的所有路径。它用图的形式表示一个过程内所有基本块执行的可能流向, 也能反映一个过程的实时执行过程。
Frances E. Allen于1970年提出控制流图的概念。此后,控制流图成为了编译器优化和静态分析的重要工具。

控制流图的几种结构:

image-20220817215556861

2.特点

  • 控制流程图是过程导向的
  • 控制流程图显示了程序执行过程中可以遍历的所有路径
  • 控制流程图是一个有向图
  • CFG 中的边描述控制流路径,节点描述基本块
  • 每个控制流图都存在2个指定的块:Entry Block(输入块),Exit Block(输出块)

3.实例

例1:

if  A = 10 then
  if B > C
     A = B
  else A = C 
  endif
  endif
print A, B, C 

其控制流图为:

image-20220817215722540

例2:计算整数X和整数Y的最大公约数

int gsd(int x,int y)
{
	int q=x;
	int r=y;
	while(q!=r)
	{
		if (q>r)
			q=q-r;
		else 
			r=r-q;
	}
	return q;
}

image-20220817215822284

4.控制依赖性(Control dependencies)

控制依赖讲的是:在某种情况下,一个程序指令的执行依赖于前面指令的执行(在前面某个指令执行后才会执行)。

下面从一个例子来说明控制依赖性:

S1:   if x > 2 then
S2:       y = 3   

上面我们可以看出:只有在S1语句x > 2时,才会执行S2语句,也就是说S2的执行受S1语句的控制(影响),那么我们就称S1与S2具有控制依赖性。

5.数据依赖性(Data dependencies):

数据依赖产生于两个访问或修改相同资源的语句。

同样从例子来说明数据依赖性:

1       x = 10
2       y = x + c

从上面我们可以知道:x 值的变化会引起 y 值得变化,那么我们就称 y 依赖于 x,y 与具有数据依赖性。

开源的控制流生成器

如下列举了几款搜索到的控制流图生成器,一些是专门用来生成控制流的,一些是作为一个模块嵌套的并可以取出来单独用到的。

pycfg

https://github.com/vrthra/pycfg

staticfg

https://github.com/coetaur0/staticfg

CFG-Generator

https://github.com/Tiankai-Jiang/CFG-Generator

pyt

https://github.com/python-security/pyt

py2cfg

https://gitlab.com/classroomcode/py2cfg

以上这些是针对Python抽象语法树来生成控制流的。

pytype

https://github.com/google/pytype

python-control-flow

https://github.com/rocky/python-control-flow

以上这些是针对Python字节码来生成控制流的。

参考文献

https://blog.csdn.net/qq_42052733/article/details/115923993

https://blog.csdn.net/weixin_64871537/article/details/123415427

为了在Windows安装ADB工具,你可以按照以下步骤进行操作: 1. 首先,下载ADB工具包并解压缩到你自定义的安装目录。你可以选择将其解压缩到任何你喜欢的位置。 2. 打开运行窗口,可以通过按下Win+R键来快速打开。在运行窗口中输入"sysdm.cpl"并按下回车键。 3. 在系统属性窗口中,选择"高级"选项卡,然后点击"环境变量"按钮。 4. 在环境变量窗口中,选择"系统变量"部分,并找到名为"Path"的变量。点击"编辑"按钮。 5. 在编辑环境变量窗口中,点击"新建"按钮,并将ADB工具的安装路径添加到新建的路径中。确保路径正确无误后,点击"确定"按钮。 6. 返回到桌面,打开命令提示符窗口。你可以通过按下Win+R键,然后输入"cmd"并按下回车键来快速打开命令提示符窗口。 7. 在命令提示符窗口中,输入"adb version"命令来验证ADB工具是否成功安装。如果显示版本信息,则表示安装成功。 这样,你就成功在Windows安装ADB工具。你可以使用ADB工具来执行各种操作,如枚举设备、进入/退出ADB终端、文件传输、运行命令、查看系统日志等。具体的操作方法可以参考ADB工具的官方文档或其他相关教程。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [windows环境安装adb驱动](https://blog.csdn.net/zx54633089/article/details/128533343)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Windows安装使用ADB简单易懂教程](https://blog.csdn.net/m0_37777700/article/details/129836351)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值