环境准备
- 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 |
成果
最终生成的流程图如下: