soot基础 -- soot 中的处理阶段

本文介绍了soot的处理阶段,重点讲解了Jimple和Grimp之间的转换以及如何构建call graph。soot将源代码转化为Jimple作为基础,通过不同阶段进行分析和优化。在获取call graph时,需开启全局模式,涉及jb、cg、wjtp等多个处理阶段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值