环境准备
- OS: Windows 10
- JDK: 1.8.0_191
- soot: 3.0.1
步骤
下载Soot
Soot的版本要刚刚好(3.0.1)。如果版本过低不支持JDK1.8,过高会提示某些库找不到。
下载jar包最好下载***-jar-with-dependencies.jar,参考下载地址:链接。
手动编译java源文件
Soot既可以读取*.java,也可以读取编译好的*.class。我选择先手动将java源文件编译成class文件,因为这样可以准确地暴露出代码中的错误。手动编译使用命令:
| 1 | javac ***.java | 
注意最好不要直接将原工程目录下编译好的class文件直接拿来用,这样可能会出现其他问题,比如由于包名不正确导致找不到类等等。
使用CFGViewer生成流程图描述文件
| 1 | java -cp sootclasses-trunk-jar-with-dependencies.jar soot.tools.CFGViewer --soot-classpath .;"<path-to-jdk>\jre\lib\rt.jar" --graph=BriefBlockGraph <ClassName> | 
其中--graph=BriefBlockGraph会使顺序执行的指令聚合在一起,看起来更加清晰整洁。
生成的描述文件在sootOutput目录下,每个函数一个文件(*.dot)。
使用Graphviz生成流程图
首先在官网下载Graphviz。使用指令:
| 1 | <path-to-dot.exe> -Tpng '.\***.dot' -o ***.png | 
成果
最终生成的流程图如下:
