图解angr中两种CFG的区别
angr里提供两种CFG的生成,一种是CFGFast,一种是CFGEmulated。这两种究竟有什么不同呢?
本文主要是用图来说明下这个问题。可能回答的不是很完整。
CFGFast这种CFG生成的比较快,但是没有考虑上下文关系。比如函数A调用了printf函数,函数B也调用了printf函数。就会变成下图的形式。
而CFGEmulated这种CFG则是考虑了上下文关系,上面的例子在CFGEmulated里就会变成下图的样子。
现在来实际看看angr生成的控制流图是什么样子的。针对以下C程序,我们来画CFGEmulated和CFGFast。
#include<stdio.h>
int A(){printf("hello world\n");
}
int B(){printf("hello");
}
int C(){printf("world");
}
int main()
{int a,b,c;scanf("%d%d%d",&a,&b,&c);if (a == 1){A();}else if (b == 1){B();}else{C();}return 0;}
angr生成CFG以及可视化CFG的代码如下:
import angr
from angrutils import *project = angr.Project("example/cfg",load_options={'auto_load_libs': False})cfg_emulated = project.analyses.CFGEmulated()
plot_cfg(cfg_emulated, "cfg_emulated", asminst=True, remove_imports=True, remove_path_terminator=True)cfg_fast = project.analyses.CFGFast()
plot_cfg(cfg_fast, "cfg_fast", asminst=True, remove_imports=True, remove_path_terminator=True)
CFGEmulated如下图所示:
CFGFast如下图所示:
可以看到CFGEmulated的三个分支的printf都单独提出来了。
而CFGFast中,可以看到printf节点的前继节点是B,C两个函数。
图解angr中两种CFG的区别相关推荐
- apache php 工作模式,PHP Apache中两种工作方式区别(CGI模式、Apache 模块DLL)
搜索热词 对PHP在Apache中两种工作方式的区别(CGI模式.Apache 模块DLL)感兴趣的小伙伴,下面一起跟随编程之家 jb51.cc的小编两巴掌来看看吧! Windows 下有两种方法使 ...
- JSP中两种include的区别
jsp中有两种include,一种是<%@include file="xxx.jsp"%>,另一种是<jsp:include page="xxx.jsp ...
- 微信开发中两种access_token的区别
1. 普通的获取用户信息,只需要调用微信用户信息接口就能获取,因而使用的是第一种普通的access_token. 2. 网页授权时获取微信用户信息,用的就是第二种,网页授权access_token. ...
- 微信开发中两种access_token的区别和不同用处总结
微信开发需要用到的access_token,其实是分为两个种类的,一种是普通的access_token,另一种是网页授权access_token. 普通的access_token,是微信开发者调用微信 ...
- SM中两种组件的区别----来自阿红
Servicemix中有两类构件: 轻量级构件(也称为Pojo构件):实现了JBI规范中定义的构件必须实现的接口(Component和ComponentLifeCycle接口).轻量级构件不可以在运行 ...
- matlab 遍历每个像素点,Mat中两种像素遍历方法比较
小白,入门中,不足其指正.刚刚接触opencv,从一个Matlab风格的编程环境突然跳转到C++,实在有些不适.单就pixels scanning花了好长时间研究.opencv-tutorials给出 ...
- Cesium 中两种添加 model 方法的区别
概述 Cesium 中包含两种添加 model 的方法,分别为: 通过 viewer.entities.add() 函数添加 通过 viewer.scene.primitives.add() 函数添加 ...
- Java中的string定义的两种方法和区别
java中的String定义的两种方法和区别 第一种:new方式 String s1 = new String("hello world"); String s2 = new St ...
- JavaScript中的ReferenceError和TypeError两种错误的区别
转自JavaScript中的ReferenceError和TypeError两种错误的区别 作为前端工作人员,在调试JavaScript程序的时候经常遇到两个错误:ReferenceError和Typ ...
最新文章
- P6 根轨迹分析法-《Matlab/Simulink与控制系统仿真》程序指令总结
- ZooKeeper:win7上安装单机及伪分布式安装
- python里的os模块_python中os模块再回顾
- sqoop1.4.5 导入 hive IOException running import job: java.io.IOException: Hive exited with status 1
- Linux基础二(挂载、关机重启与系统等级)
- java方法报错_.setUndecorated 方法报错
- 面试官:你说对MySQL事务很熟?那我问你10个问题
- 屏蔽预训练模型的权重。 只训练最后一层的全连接的权重。_轻量化 | 如何让笨重的深度学习模型在移动设备上跑起来?看它!...
- Java运行时的子类识别
- Kubernetes 网络部分
- 原子性 - synchronized关键词
- js 图片浏览插件原生
- 88个塑胶模具设计中常用知识点!
- java json转二进制数据_Json二进制数据
- WPF Binding绑定模式
- ubuntu死机咋办_Ubuntu死机解决方法汇总
- 阿里P9告诉你:P6-P10到底啥区别,别再傻傻分不清?怎样才能打怪晋级?
- Android Studio和SDK下载、安装和环境变量配置(全网最详细步骤)
- 抖音最新风控体系研究
- Mac装双系统的那些优缺点详解