Soot -- Soot中的一些语句细节
来源:互联网 发布:vs code php 开发 编辑:程序博客网 时间:2024/06/05 02:01
1.Soot中语句中如何判断是否是调用语句?
见如下代码:
- 作者会将java代码等,一般转换为Jimple的中间形式。(Jimple可以说是Soot的一个核心)
- 所以对于当我们想获得的信息,最好都从与Jimple相关的对象中获得。(Soot中对于Jimple这种中间的形式进行了对象的建模,从而用对象的形式模拟出Jimple语言中的语句)
private static void testCFG4(SootMethod method){//1.获取方法体,并转化为JimpleBody,//JimpleBody 比 Body 要包含更多有用的信息。JimpleBody body = (JimpleBody)method.retrieveActiveBody();//2.我们可以据此来绘制出Unit之间的调用图。UnitGraph g = new BriefUnitGraph(body);Iterator<Unit> it = g.iterator();while (it.hasNext()) {//3.Stmt 是Jimple一条语句的表示形式。(Stmt继承自Unit,所以有更多信息)Stmt stmt = (Stmt)it.next();if(stmt.containsInvokeExpr()){System.out.println("the invoke is : " + stmt.toString() ); System.out.println("the method is : " + tmp.getInvokeExpr().getMethod()); }}}
2.Soot中对于switch的处理(Jimple语言)
soot中对于switch的处理是分情况的,他提供了两种建模方式,JTableSwitchStmt以及JLookupSwitchStmt,在其建模中认为case 区分主要为数字。
两者的区别在于:
- 【 JTableSwitchStmt 】switch是分成多种情况的,并且通过数字来进行区分这些情况。如果数字是连续的,比如说,2,3,4,5 ,那么soot就会采取 JTableSwitchStmt 来存储它,因为这样查找效率更高。
- 【 JLookupSwitchStmt 】如果case中构成的数字情况集合是稀疏的,比如,case情况有2,9,100,那么将采取 JLookupSwitchStmt 方式来存储switch相关的一些内容,没有上面的 JTableSwitchStmt 查找效率高,但是节省空间。
举例:
例1: (下面代码在soot中表示为 JTableSwitchStmt)
switch(type){case 2:A1();break;case 3:A2();break;case 4:A3();break;default:A3(); }
例2: (下面代码在soot中表示为 JLookupSwitchStmt)
switch(type){ case 2: A1(); break; case 5: A2(); break; case 9: A3(); break; default: A3(); }
附: 参看JTableSwitchStmt,JLookupSwitchStmt 中的 toString( ) 函数,能了解到更细节的原理。
1 0
- Soot -- Soot中的一些语句细节
- soot
- soot基础 -- soot 中的处理阶段
- Soot 学习笔记 6:一些 Soot 重要的类
- soot相关
- soot-1
- soot-2
- Soot中的包(Packs)和阶段(phases)
- Soot -- 关于语句图(UnitGraph)的说明
- soot学习1.Soot 环境搭建
- soot基础 -- soot中基本的对象
- Soot学习第二篇;代码执行soot
- Soot对象基础(Fundamental Soot Object)
- Windows10下Soot插件在eclipse中的安装
- soot学习(一)
- Soot学习笔记(1)
- Soot学习笔记(2)
- Soot之BackwardFlowAnalysis Example
- 我对多线程的理解
- DFS(深度优先搜索)基本介绍
- 【机房收费系统】结账
- JavaScript 对象&& window
- ajax笔记1--HTTP,HTTPS和HTTP请求概念介绍
- Soot -- Soot中的一些语句细节
- Quartz2D学习笔记
- 常用加密算法
- http请求的8种方式
- Python中安装Tkinter模块
- UVALive5052 Genome Evolution(想法题)
- PHP输入流php://input
- angular分页插件tm.pagination
- Mybatis对Oracle批量插入的配置