1.概述
soot的执行被划分成了很多阶段,这些阶段的名字叫做packs.
- soot的设计值得学习,通过划分阶段,将每个阶段处理的职责分清楚。
- 同时,也正确的处理了各个阶段的依赖关系。
2.soot阶段图
(1)大致的框架
先来看一张总体的框架图:
- 输入的起点是Jimple . 因此,必须将要处理的 源代码 转化为 Jimple,才能进行后续的其他的处理。
- Jimple在Soot中起到了基础核心的作用。
- 用户可以在转化阶段加入一些分析相关的信息。这个可以在jtp(Jimple Transformation pack)阶段,以及stp(Shimple transformation pack)阶段添加处理来实现。
-
摘自:soot生存手册
关于以上符号的说明:
第1个字母:【表示中间代码】
* s 代表 Shimple
* j 代表 Jimple.
* b 代表 Baf.
* g 代表 Grimp.
第2个字母:【该阶段处理的角色,责任】
* b 代表 方法体(body)创建阶段。
* t 代表 用户定义的转换阶段。
* o 代表 优化(optimizations)。
* a 代表 属性生成。(annoation)
最后的P:
* p 表示“pack",是处理阶段的意思。
(2) 大阶段与小阶段
下面是几乎所有的soot自带的处理阶段的介绍。
* 【主要建立在Jimple的基础之上】从中可以看出,大部分的处理阶段都是针对Jimple的,可以看出Jimple在soot中发挥出来的基础性的作用。
* 这些阶段以及子阶段,有些可以同时使用,有些是选择使用(比如,call graph)。
* 【不同的大阶段有不同的用处】每个大的阶段的子阶段处理的内容也是不同的。(选对中间代码)
* 更具体的阶段介绍: 帮助文档
jb Creates a JimpleBody for each method
jb.ls Local splitter: one local per DU-UD web
jb.a Aggregator: removes some unnecessary copies
jb.ule Unused local eliminator
jb.tr Assigns types to locals
jb.ulp Local packer: minimizes number of locals
jb.lns Local name standardizer
jb.cp Copy propagator
jb.dae Dead assignment eliminator
jb.cp-ule Post-copy propagation unused local eliminator
jb.lp Local packer: minimizes number of locals
jb.ne Nop eliminator
jb.uce Unreachable code eliminator
jb.tt Trap Tightener
jj Creates a JimpleBody for each method directly
from source
jj.ls Local splitter: one local per DU-UD web
jj.a Aggregator: removes some unnecessary copies
jj.ule Unused local eliminator
jj.tr Assigns types to locals
jj.ulp Local packer: minimizes number of locals
jj.lns Local name standardizer
jj.cp Copy propagator
jj.dae Dead assignment eliminator
jj.cp-ule Post-copy propagation unused local eliminator
jj.lp Local packer: minimizes number of locals
jj.ne Nop eliminator
jj.uce Unreachable code eliminator
wjpp Whole Jimple Pre-processing Pack
wspp Whole Shimple Pre-processing Pack
cg Call graph constructor
cg.cha Builds call graph using Class Hierarchy
Analysis
cg.spark Spark points-to analysis framework
cg.paddle Paddle points-to analysis framework
wstp