学习Soot - 2

来源:互联网 发布:陈百祥演技知乎 编辑:程序博客网 时间:2024/06/01 08:04

还是主要翻译生存手册


一、Soot Phases

        Soot的执行被分为几个阶段,每个阶段称为pack。soot执行的第一步都是产生Jimple代码,然后将Jimple代码送入不同的packs。

        

        图中每个小方格就是一个pack。pack命名模式如下:

                第一个字母指定pack接收的IR:s -- Shimple,j -- Jimple,b -- Baf,g -- Grimp

                第二个字母指定pack的作用:b -- body creation,t -- user-defined transformations,o -- optimizations,a -- attribute generation(annotation)

                第三个字母p代表:pack

                例如:jap -- Jimple annotaions pack

        Figure 1是Soot的过程内执行流。每一个application的class会按照其中一条路径进行处理,这个class不会获得其他的application的classes/


       

        Figure 2是Soot的过程间执行流。当进行过程间分析时,需要设置soot为Whole-Program mode(-w选项)。加入-w选项后,soot增加了三个packs:cg(call-graph generaion),wjtp(whole Jimple transformation pack),wjap(whole jimple annotation pack)。若加入-W选项,则还添加了wjop(whole jimple optimization pack)。

        与过程内执行流不同的是,新添的packs产生的信息都可以通过Scene数据结构被soot正在处理的每个application class获得。


二、Soot提供的分析方法

1. 空指针分析

         位于jap pack中,分为两个实体:checker和colorer。checker检查可能抛出空指针异常的指令,colorer用来添加标签信息。

         $java -cp soot-x.y.z.jar soot.Main -cp . -pp -xml-attributes -f J -p jap.npcolorer onfilename

         会产生xml文件和Jimple文件,可能要放在eclipse下才能看到效果?(没试)

2. 数组边界分析

         $java -cp soot.x.y.z.jar soot.Main -cp . -pp -xml-attributes -f J -p jap.lvtagger onfilename


        


        




0 0
原创粉丝点击