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中的一些语句细节相关推荐

  1. dos下 和 批处理中的 for 语句的基本用法

    原文地址:http://blog.csdn.net/wh_19910525/article/details/7912440 for 语句的基本用法 : 最复杂的for 语句,也有其基本形态,它的模样是 ...

  2. java 中的finally 语句块执行顺序

    2019独角兽企业重金招聘Python工程师标准>>> 参考博文1:https://www.ibm.com/developerworks/cn/java/j-lo-finally/ ...

  3. [转载] python中的且语句_简单探讨python中的语句和语法

    参考链接: 在Python中解包:并行分配之外 python程序结构 python"一切皆对象",这是接触python听到最多的总结了.在python中最基层的单位应该就是对象了, ...

  4. 详解SQL中Groupings Sets 语句的功能和底层实现逻辑

    前言 SQL 中  Group By  语句大家都很熟悉, 根据指定的规则对数据进行分组 ,常常和 聚合函数 一起使用. 比如,考虑有表  dealer ,表中数据如下: 如果执行 SQL 语句  S ...

  5. 程序员前辈归纳整理Python中的控制流语句的知识点(要记得收藏)

    这篇文章主要归纳整理了Python中的控制流语句的知识点,来自于IBM官方网站技术文档,需要的朋友可以参考下 程序流 Python 解释器在其最简单的级别,以类似的方式操作,即从程序的顶端开始,然后一 ...

  6. oracle存储过程ddl,Oracle 存储过程中的DDL语句

    Oracle的存储过程,是我们使用数据库应用开发的重要工具手段.在存储过程中,我们大部分应用场景都是使用DML语句进行数据增删改操作.本篇中,我们一起探讨一下数据定义语句DDL在存储过程中使用的细节和 ...

  7. (转)java 中的try catch finally 语句中含有return语句的执行情况(总结版)

    原处:http://blog.csdn.net/ns_code/article/details/17485221 在这里看到了try catch finally块中含有return语句时程序执行的几种 ...

  8. R语言嵌套的ifelse语距:将一条If语句放在另一条If语句中,该语句作为嵌套的If else调用。If else语句允许我们根据表达式结果(TRUE或FALSE)打印不同的语句,执行不同的语句块

    R语言嵌套的ifelse语句:将一条If语句放在另一条If语句中,该语句作为嵌套的If else调用.If else语句允许我们根据表达式结果(TRUE或FALSE)打印不同的语句,执行不同的语句块 ...

  9. phpmyadmin执行mysql语句_如何在phpMyAdmin中执行sql语句

    大家使用phpMyAdmin中常遇到这样的问题:MySQL Error Message: MySQL Query Error SQL: SELECT main.*, field.* FROM ucho ...

最新文章

  1. EOS账户系统(2)账户和钱包
  2. 也说电影《魔比斯环》
  3. android下拉弹性gif,android-pulltorefresh 下拉加载中使用gif动图
  4. 安装pgsql解压版操作步骤
  5. 【重难点】【JVM 01】OOM 出现的原因、方法区、类加载机制、JVM 中的对象
  6. 【Git/Github学习笔记】Git常用命令(代码拉取)
  7. IEEE 你吃透了吗?
  8. .Net Framework4 与.Net Framework4.0 client profile区别问题
  9. JAVA实现 - 问题 G: 超大型 LED 显示屏
  10. TransBigData 针对交通时空大数据处理的Python包
  11. 为什么要进行前后端分离
  12. nginx配置-优化静态资源
  13. java tic tac toe_确定Tic Tac Toe游戏的算法
  14. 算法:JavaScript实现 三色旗 代码详解
  15. PRA2020.4 平台 API 接口调用
  16. mysql用int做时间戳存储,最大2147483647, 大限2038年
  17. 《从0到1:CTFer成长之路》 [第一章 web入门] 常见的搜集
  18. JQuery之向标签动态插入html
  19. 用鼠标滚轮滚动控制图片的缩小放大
  20. 前端简易服务器之vscode篇(可供项目预览手机访问电脑网页等)

热门文章

  1. spring JDBCTemplate实现批量插入及返回id
  2. .aspx和.aspx.cs之间的区别
  3. HTTPS、TLS连接
  4. 远程视图 RemoteViews
  5. javac 与 java的区别
  6. 取模后的余数,向负无穷方向舍入
  7. C# 使用 Direct2D 实现斜角效果
  8. 浅谈PPO算法-玩转月球登陆
  9. 《程序员的数学》三部曲
  10. 互联网摸鱼日报(2023-04-30)