1.命令行执行
本文主要摘自 Eric Bodden 的博客,并于 win 7上验证。
在命令行中,在 soot 的 jar 包目录下,可以使用如下命令查看帮助。参见 soot的命令行选项,推荐浏览一遍。
java -jar soot-2.5.0.jar soot.Main -help
soot 可以处理3种类型的文件:
- java源文件
- java .class 文件
- soot 的 Jimple 源文件,“.jimple”。
如果 soot 要处理单个文件,输入如下命令:
java -jar soot-2.5.0.jar -cp . -pp Hello
虽然这里不用为 java 指定 -cp,但是 soot 自身需要指定 -cp 的,同时为了能索引到 jdk 的符号,例如 java.lang.Object 等,加上 -pp 选项(“prepend path”)。-pp 选项的前提是CLASSPATH 和 JAVA_HOME 设置正确,他会自动把当前系统的 CLASSPATH 以及 ${JAVA_HOME}/lib/rt.jar 等加入。如果不用 -pp 选项,可以使 -cp 包含jdk 中的 jre/lib/rt.jar 这个包。
java -jar soot-2.5.0.jar -cp .;"%JAVA_HOME%"\jre\lib\rt.jar Hello
如果使用 soot 处理目录。需要加上 -process-dir 选项。同时一定要配合 -d 选项指定输出目录。
java -jar soot-2.5.0.jar soot.Main -cp . -pp -process-dir . -d ./sootout
soot 可以指定处理不同的file,包括 .class/ .java/ .jimple
-src-prec 选项指定 soot 的输入类型:
- c or class (default): favour class files as Soot source,
- only-class: use only class files as Soot source,
- J or jimple: favour Jimple files as Soot source, and
- java: favour Java files as Soot source.
例如:
-src-prec java
再有关于 application class 和 library class 的区别,前者是 soot 真正处理的,后者仅作为类型符号。如果使用了 -app 选项, soot 不会处理 java.* 和 com.sun.* 包内的类,如果想包含他们,就使用 -i 选项,例如
-i java.
如果想选择 soot 的输出格式,可以使用 -f 选项,参见 -f 选项说明
最后关于 soot 的 phase 选项。这块回头介绍了phase 再说。