soot代码分析框架的基础知识(一)

Class categories

class分为三类:argument classes,application classes,library classes

argument classes:指的是你给soot指定的classes。使用命令行工具时,argument classes就是显示列出来的需要分析的class或者由-process-dir选项指定的文件夹中的类;使用eclipse插件时,argument指的就是你使用soot插件时选择的类,或者当前完整项目中的所有的类。

application classes:被soot框架分析转换输出的那些类。

library classes:被application classes引用的类,但不是application classes。它们被用于转换分析过程中的类,但它们不会被转换输出等。

影响classes分类的两种模式:application mode和non-application mode,在application mode模式下,除过argument classes是application classes外,被argument classes直接或间接引用的classes都是application classes。而标准的Java runtime system的包不是。在non-aplication mode模式下,argument classes是application classes,其他的被argument classes引用的类都是library classes。

注:理解class的分类,有助于在设置-soot-classpath时不容易出错。

例如:
假设类文件是由下述源码生成:
interface UI{
	public void display(String msg);
}
class HelloWorld{
	public static void main(String[] arg){
		UI ui = new TextUI();ui.dispaly(“HelloWorld”);
	}
}
import java.io.*;
class TextUI implements UI{
	public void display(String msg){
		System.out.println(msg);
	}
}
命令行1:
java soot.Main HelloWorld
那么:

HelloWorld是argument classes和applicationclasses。UI和TextUI则是library classes,以及被String和System.out引用的java.lang.String,java.io.PrintStream等都是library classes.

命令行2:
java soot.Main –app HelloWorld
那么:

HelloWorld是argument classes,HelloWorld和被它引用的类都是applicationclasses.

命令行3:
java soot.Main –i java. –app HelloWorld
那么:

HelloWorld仍然是argument classes,applicationclasses会包含名字以java.开始的java runtime classes、HelloWorld、UI和textUI以及java runtime中的引用。


常用Options

无论是命令行使用soot,还是扩展soot分析框架,常用options的理解都是非常重要的,这关系到类的加载是否正确、soot-classpath是否正确设置、是否在whole-program下分析、输入输出文件格式、是否进行优化等一系列的问题。
下述是我整理的一些常用options:

General Options:

-app
在application mode下运行
-w
-whole-program
在whole-program下运行

Input Options:

-cp path
-soot-class-path path
-soot-classpath path

上述三个使用path作为classpath去寻找argument class

-pp(-prepend-classpath)
prepend the given soot classpath to thedefault classpath。被作为寻找类型层次的包

-process-dir dir
-process-path dir
上述两个将dir中的所有类作为要处理分析的类

-android-jars path
使用path作为寻找android.jar文件的路径

-force-android-jar path
强行使用path作为寻找android.jar文件的路径

-src-prec format
设置输入文件的格式

-main-classclass
为whole-program分析设置main class

Output Options

-d dir
-output-dir dir

设置dir为输出文件夹
-f format
-output-foramt format

设置soot的输出文件格式

ApplicationMode Options

-i pkg
-include pkg

设置pkg中的类为application classes

-x pkg
-exclude pkg 

排除pkg中的类作为application classes

-include-all
被argument classes引用的类都作为application classes

更加详细的Options




你可能感兴趣的:(优化,代码分析,数据流分析,Soot)