2. Soot核心Body

Body 是对应的是Java一个函数体,Body是Soot的核心,Graph、Flow的构建都是基于Body进行分析,当然你可以基于不同的IR语言构建不同的Body,soot提供了JimpleBody,ShimpleBody, GrimpBody,当然soot主要是基于Jimple进行分析,在流程中构建的是JimpleBody,其它的Body的构建需要通过开关来控制

Soot提供了 ShimpleBody与JimpleBody的相互转换

以及JimpleBody到GrimpBody的转换

2.1  Trap

Trap 多对应的就是Java字节码中的异常Table

我们以Jimple为例子来解释

2.2  Local:

Local 对应的是Java字节码中的局部函数

2.2.1 IR 的Jimple

我们从上面的例子可以看到Jimple的一些语言特点:

  1. 基于栈

java语言的字节码表示本来就是栈的,而象Dalvik 是基于寄存器的,在这点上Jimple基于栈

2.有类型

每一个参数都定义了Type,并且类型精度没有丢失,比如int $i0

3. 基于三地址分析

三地址解析中会出现很多的中间变量

三地址同时会拆解一些高级特性,被分解成多个单位,包含一些低级操作,支持低端指令

一般而言,三地址代码将包含大部分低级操作,即目标机所支持的指令。

先看一个例子:

int i ,j; i = 2; j = 2*i + 8;

转化为:

int i, j, temp$0, temp$1, temp$2, temp$3;

temp$0 = 2;

i = temp$0;

temp$1 = 2 * i;

temp$2 = temp$1;

temp$3 = temp$2 + 8;

j = temp$3;

多个操作转化成了三地址解析,通过temp来赋值

我们来看Java的字节码的操作:

0: iconst_2

1: istore_1

2: iconst_2

3: iload_1

4: imul

5: iload_1

6: iadd

7: istore_2

在Java字节码中也是低级操作,但没有使用三地址方式,使用栈的方式来解决临时变量的问题。

Jimple是直接翻译的字节码的操作,并没有自己拆解复杂语句到低级操作

2.2.2 IR 的Shimple

Shimple 与Jimple的区别:SSA static single assignment form静态单赋值,可用于流敏感操作

将程式码转换为SSA形式,最简单的方法,就是将每个被赋值的变数,以一个新的变数来取代,而新的变数名称则为一个带着版号的旧变数

int i = i +100

i0 i0_0

i0_0=i0+100

2.3 Soot Stmt

Unit是Soot的单元, Stmt 继承Unit代表着执行的语句,Soot将执行指令分成多个类型

过程内控制流

IfStmt , GotoStmt , SwitchStmt

过程间的控制流:

InvokeStmt ,ReturnStmt,ReturnVoidStmt., ThrowStmt

监控语句:MonitorStmt

赋值语句:DefinitionStmt

其它类型:NopStmt, BreakponitStmt

已经不使用的语句RetStmt

2.4 Soot box

盒子(Boxes)

  一个盒子(Box)提供了一个间接访问soot (Unit,Value)的入口,类似于Java的一个引用,当Unit包含另一个Unit的时候,需要通过Box来访问,Soot 里提供了两种类型的Box, 一个是ValueBox一个是UnitBox

2.4.1 UnitBox

一个UnixBox包含着一个Unit操作,一个Unit的操作会包含着多个UnitBox(有些类型的Unit会包含其他Unit的引用,那么这时候就需要包含Unixbox),比如说,GotoStmt 需要知道目标的Unit是什么,所以一个Unit会包含其它的UnitBox,通过 UnitBox获取下一个Unit

2.4.2 ValueBox

  与Unit类似,我们通常也需要指向Value的box。这被表示为ValueBox类。对于一个Unit,我们能够得到一系列的ValueBox ,包含了在Unit中使用的值以及定义的值, 一个Valuebox对应这一个Value,而一个value可以对应多个ValueBox
  比如上图的i0<0的表达式就是包含一个valuebox, conditionexprbox,里面包含着LtExpr的value,而LtExpr又包含这op1Box左边和op2Box右边两个ValueBox, op1Box的valuebox又包含着i0这个local的本地value, 以及op2Box的ValueBox又包含着0这个常量Value

Unit 包含着多个UnitBox, ValueBox, 而UnitBox,ValueBox又指向独立的Unit和Value, 这里看来Box 更象一个指针,指向Value和Unit

中间表达式的适配

Soot 对每个IR Jimple, Shimple等构建了每个语言自己的Unit,Stmt,ValueBox,Value,以便于各种不同的IR的分析

2.4.3 Value

Value数据,常见的比如local 变量名, constant 常量

一个ValueBox就包含着Value,在上面的例子里i1=0 等于是一个Stmt, i0是一个Valuebox,里面包含这i0这个local 的value

Soot 静态分析框架(二)Soot的核心相关推荐

  1. Soot 静态分析框架(一)整体框架

    1. Soot 静态分析框架 Soot核心对象分别是:Scene.SootClass.SootMethod.SootField.Body. 1.1  Scene Scene:Scene表示完整的分析环 ...

  2. Soot 静态分析框架(三)Soot 过程分析

    3.1 Soot构建语法树 Soot通过objectweb来进行字节码构建成语法树 首先scene会去查找一些基础的JVM的类 基础的对象Object, Boolean, Void, Integer, ...

  3. Soot 静态分析框架(七)模块分析

    Java 9里开始支持模块化,以一个独立的开源项目jigsaw而来, 具体可以参考链接, https://openjdk.java.net/projects/jigsaw/  同时也可以参考JSR37 ...

  4. Spring框架(二) 底层架构核心概念解析-四万字你值得一看

    本篇文章将对Spring底层的一些概念做一些简单的分析 , 也是为了方便后续在阅读源码的时候更加的方便 BeanDefintion BeanDefintion是一个接口 , 它表示一个Bean的定义 ...

  5. 关于soot静态分析的学习(一)

    本文中关于soot的研究使用,仅代表本人理解程度,因本人为0基础,所以如有出错,欢迎指出. 一.soot是什么? Soot(Java静态分析框架) 其实Soot最开始设计的时候,主要目的就是为了对Ja ...

  6. Hades:移动端静态分析框架

    只有通过别人的眼睛,才能真正地了解自己 --<云图> 背景 作为全球最大的互联网 + 生活服务平台,美团点评近年来在业务上取得了飞速的发展.为支持业务的快速发展,移动研发团队规模也逐渐从零 ...

  7. Spring框架(二)

    Spring框架(二) 一.控制反转IOC和依赖注入DI 控制反转和依赖注入是对同一件事情的不同描述,从某个方面讲,就是它们描述的角度不同.控制反转是说不需要程序员管理和控制bean,是解耦的目的,而 ...

  8. Soot(一):Soot的三种使用方式:命令行、idea、eclipse

    文章目录 1. Soot下载安装 2. Soot命令行使用 3. Soot在idea下的使用 3. soot在eclipse下的使用 1. Soot下载安装 下载地址:https://soot-bui ...

  9. phasar LLVM静态分析框架介绍

    一.简介 简介:PhASAR是一个基于LLVM的静态分析框架,用户可以进行数据流分析,框架会帮助进行指向分析.调用图构建. 安装:ubuntu下运行如下脚本. # 安装 $ git clone htt ...

最新文章

  1. 网络营销十技之六:联署计划营销
  2. python打开界面是什么样的-python学习笔记(图形用户界面)
  3. 网易云音乐网络库跨平台化实践
  4. DB2连接不上mysql数据库_一次DB2数据库连接失败(SQLSTATE=08001)的解决方法
  5. python一个类有几个实例对象_Python为单个对象/类创建多个实例
  6. pythondd_一些PYTHON :D:D:D
  7. 集合的常用方法(增加、删除、并集、交集、差集、对等差分、超集和子集)
  8. 系统动力学模型_RCR新文:基于系统动力学模型的中国煤炭产能情景预测
  9. Atitit 学习一项技术的方法总结 目录 1. 自己动手实现学习法 1 2. 七步学习法 —— 如何高效学习一项技能 1 3. 如何快速学习一项技能-十步学习法 - HugoLester - 博客
  10. 7.5日chinapub生日聚会
  11. [信号]预加重与去加重--转
  12. python控制电脑音量,声音之控制音量,,
  13. 学习记录-app渗透
  14. python ValueError: No JSON object could be decoded
  15. 人工智能有哪些优点和缺点?
  16. pytorch 模型model 的一些常用属性和函数说明
  17. [案例4-2]饲养员喂养动物
  18. 将双零点双极点调节器简化为普通的PI调节器
  19. 研究生值得一览的优秀文章
  20. 使用虚拟光驱重装系统

热门文章

  1. 举个栗子!Tableau 技巧(127):购物篮分析 Market Basket Analysis 之关联购买
  2. 台式机是计算机进入睡眠状态,HP电脑显示器即将进入睡眠状态
  3. Spring框架——IOC、DI
  4. PCL点云(平面点云)分割:Plane Model Segmentation
  5. MATLAB解方程组
  6. 团队成员的角色类型及其给我们的启示
  7. 如何挑选自己喜欢的colormap样式
  8. 计算机硬盘显示隐藏,隐藏与显示硬盘盘符的最简单的方法
  9. PHP获取用户浏览器信息
  10. 线性表操作(线性表)