Soot -- 关于语句图(UnitGraph)的说明
来源:互联网 发布:2017网络歌曲排行榜 编辑:程序博客网 时间:2024/06/14 00:06
BriefUnitGraph生成UnitGraph
生成UnitGraph
这里说明一下 UnitGraph 设计的巧妙之处:
- 【正确区分职责】【区分管理者与员工】【区分各自应该拥有的数据】
- 数据的关系 与数据的内容分离(new)
- 如下:
- UnitGraph好的地方就在于,将关系进行了保存。【弄清了自己的职责】(所以我操作元素之间的关系(增加,删除)的时候,本质上操作的是UnitGraph中存储的数据)
- 但是不会对Body中的内容,Unit中的内容造成影响。
- 造成的影响:而我进行删除操作的时候又不会影响原来基本成员对象中的内容。
代码中有说明:
private static void testCFG2(SootMethod method) {// 1.获得方法体。Body b = method.retrieveActiveBody();System.out.println(b.toString());//2.将方法体中的语句组织成图的形式。(一个方法中更像是一棵树)【语句之间的逻辑关系建立】UnitGraph g = new BriefUnitGraph(b);Iterator<Unit> it = g.iterator();//3.结点的一些说明。/** * (1)结点并不清楚自己的逻辑位置,前后关系不是很清楚的。 * (2)UnitGraph更清楚各个结点的位置,以及相互之间的逻辑关系。(管理者) * (3)正确区分: Unit 以及 UnitGraph各自的职责。 */while (it.hasNext()) {Unit tmpUnit = it.next();if (tmpUnit.branches()) {System.out.println("the branch is :" + tmpUnit.toString());List<Unit> us = g.getSuccsOf(tmpUnit); //分支情况下,一个Unit是有多个后继节点的。Iterator<Unit> i = us.iterator();while (i.hasNext()) {System.out.println("the secc is : " + i.next());}}}}
soot中不同类型UnitGraph介绍
soot中UnitGraph是一个抽象程度较高的语句图。
继承UnitGraph的有4种:
- BriefUnitGraph
- EnhancedUnitGraph
- ExceptionalUnitGraph
- TrapUnitGraph
下面给出一个UnitGraph的示例,然后查看不同的UnitGraph的特征。
待建立UnitGraph的代码:
public class ExceptionTest {public static void main(String[] args) {}public static void C(int data){try {if (data > 0 ){System.out.println("right?");}else{throw new Exception();}}catch(Exception e){if(data == 1){System.out.println("data = 1,in the exception!!");}else{System.out.println("data != 1,in the exception!!");}}}}
对应的BriefUnitGraph
- 【正常,异常分离】可以看出BriefUnitGraph将正常的流程,与异常的处理流程进行了分离。(不相交,在最后才进行汇聚)
对应的ExceptionalUnitGraph
- 【融合】将正常流程与异常流程进行了融合,而不再是分离的。
- 【什么时候跳转到异常?】正常的语句若是需要跳转到异常流程中,那么就需要在try包围之中。(所以可以看到很多语句会有跳转到异常流程中 e ;= @caughtexception)
对应的TrapUnitGraph
- 【相对于ExceptionalUnitGraph】一些很普通的语句也会跳转到异常流程中。(比如nop,goto[?=nop])---->认为try 中包含的所有的语句都有可能触发异常。
0 0
- Soot -- 关于语句图(UnitGraph)的说明
- Soot -- Soot中的一些语句细节
- 关于sql语句的一些说明
- Soot实践(一):利用Soot来获取Android的组件列表
- soot基础 -- soot中基本的对象
- Soot对象基础(Fundamental Soot Object)
- 基本的Soot对象
- Soot的eclipse插件
- soot学习(一)
- soot
- soot基础 -- 相关数据结构SootClass,SootMethod,SootBody,Unit的进一步说明
- 使用soot和graphviz画Java的控制流图
- soot生成java代码的控制流图
- soot代码分析框架的基础知识(一)
- soot代码分析框架的基础知识(二)
- 基于Soot的Java程序分析生存手册(一)
- 关于Break 、Contiun 和Return语句的说明
- soot基础 -- soot的数据结构与java语言的结构
- HTTP与HTTPS的区别
- 工作中经常用到的Eclipse快捷键
- poj 3749 破译密码
- 如何规划容量
- Tensorflow学习笔记(三)MNIST初探
- Soot -- 关于语句图(UnitGraph)的说明
- FASP
- LNMP 环境配置
- 2016年9月9号
- Hermite Curve Interpolation
- 分析JAVA应用CPU占用过高的问题
- 软件开发成本工作量估算
- 高性能网络编程(6)--reactor反应堆与定时器管理 (B)
- GSS5 - Can you answer these queries V