Soot -- Soot中的一些语句细节
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( ) 函数,能了解到更细节的原理。
Soot -- Soot中的一些语句细节相关推荐
- dos下 和 批处理中的 for 语句的基本用法
原文地址:http://blog.csdn.net/wh_19910525/article/details/7912440 for 语句的基本用法 : 最复杂的for 语句,也有其基本形态,它的模样是 ...
- java 中的finally 语句块执行顺序
2019独角兽企业重金招聘Python工程师标准>>> 参考博文1:https://www.ibm.com/developerworks/cn/java/j-lo-finally/ ...
- [转载] python中的且语句_简单探讨python中的语句和语法
参考链接: 在Python中解包:并行分配之外 python程序结构 python"一切皆对象",这是接触python听到最多的总结了.在python中最基层的单位应该就是对象了, ...
- 详解SQL中Groupings Sets 语句的功能和底层实现逻辑
前言 SQL 中 Group By 语句大家都很熟悉, 根据指定的规则对数据进行分组 ,常常和 聚合函数 一起使用. 比如,考虑有表 dealer ,表中数据如下: 如果执行 SQL 语句 S ...
- 程序员前辈归纳整理Python中的控制流语句的知识点(要记得收藏)
这篇文章主要归纳整理了Python中的控制流语句的知识点,来自于IBM官方网站技术文档,需要的朋友可以参考下 程序流 Python 解释器在其最简单的级别,以类似的方式操作,即从程序的顶端开始,然后一 ...
- oracle存储过程ddl,Oracle 存储过程中的DDL语句
Oracle的存储过程,是我们使用数据库应用开发的重要工具手段.在存储过程中,我们大部分应用场景都是使用DML语句进行数据增删改操作.本篇中,我们一起探讨一下数据定义语句DDL在存储过程中使用的细节和 ...
- (转)java 中的try catch finally 语句中含有return语句的执行情况(总结版)
原处:http://blog.csdn.net/ns_code/article/details/17485221 在这里看到了try catch finally块中含有return语句时程序执行的几种 ...
- R语言嵌套的ifelse语距:将一条If语句放在另一条If语句中,该语句作为嵌套的If else调用。If else语句允许我们根据表达式结果(TRUE或FALSE)打印不同的语句,执行不同的语句块
R语言嵌套的ifelse语句:将一条If语句放在另一条If语句中,该语句作为嵌套的If else调用.If else语句允许我们根据表达式结果(TRUE或FALSE)打印不同的语句,执行不同的语句块 ...
- phpmyadmin执行mysql语句_如何在phpMyAdmin中执行sql语句
大家使用phpMyAdmin中常遇到这样的问题:MySQL Error Message: MySQL Query Error SQL: SELECT main.*, field.* FROM ucho ...
最新文章
- EOS账户系统(2)账户和钱包
- 也说电影《魔比斯环》
- android下拉弹性gif,android-pulltorefresh 下拉加载中使用gif动图
- 安装pgsql解压版操作步骤
- 【重难点】【JVM 01】OOM 出现的原因、方法区、类加载机制、JVM 中的对象
- 【Git/Github学习笔记】Git常用命令(代码拉取)
- IEEE 你吃透了吗?
- .Net Framework4 与.Net Framework4.0 client profile区别问题
- JAVA实现 - 问题 G: 超大型 LED 显示屏
- TransBigData 针对交通时空大数据处理的Python包
- 为什么要进行前后端分离
- nginx配置-优化静态资源
- java tic tac toe_确定Tic Tac Toe游戏的算法
- 算法:JavaScript实现 三色旗 代码详解
- PRA2020.4 平台 API 接口调用
- mysql用int做时间戳存储,最大2147483647, 大限2038年
- 《从0到1:CTFer成长之路》 [第一章 web入门] 常见的搜集
- JQuery之向标签动态插入html
- 用鼠标滚轮滚动控制图片的缩小放大
- 前端简易服务器之vscode篇(可供项目预览手机访问电脑网页等)