基本参考这一篇完成:Soot生成控制流图
在程序内用代码跑,失败了。。。然后迫不得已另辟蹊径,在java直接调用cmd命令生成.dot文件
主要操作步骤如下:
- 将Soot-2.5.0.jar放在项目的bin目录下
- 用cmd命令进入bin目录,使用Soot自带的工具soot.tools.CFGViewer分析类中的每个方法的控制流并生成DOT语言描述的控制流图
String cmd2 = "cmd /c java -cp soot-2.5.0.jar soot.tools.CFGViewer --soot-classpath .;D:\\\\jdk1.7.0_67\\\\jdk1.7.0_67\\\\jre\\\\lib\\\\rt.jar code.test1";
String cmd = "cmd /c cd bin & "+cmd2;
Runtime.getRuntime().exec(cmd);
D:\\jdk1.7.0_67\\jdk1.7.0_67\\jre\\lib\\rt.jar
1.7版本的jdk下面的rj.jar的路径 code是包名
code.test1是该类的Qualified Name
&可以连接两条cmd命令
cmd /c 不打开cmd命令窗口(执行完后关闭了)
cmd /k 打开cmd命令窗口(执行完后不关闭)
cmd /c start 打开一个新窗口执行命令,原窗口关闭
cmd /k start 打开一个新窗口执行命令,原窗口不关闭
-
运行后,在项目的bin目录下生成了sootOutput文件夹,里面有所有method生成的.dot文件
-
生成png图片
- 方法1
安装graphviz, 在graphviz-2.38的bin目录下,找到gvedit.exe
File -> Open -> .dot文件
Graph -> Settings -> 生成png格式的文件
- 方法2
同样要安装graphviz
在cmd中进入sootOutput文件夹,输入命令
dot -Tpng -o add.png add.dot
将 add.dot文件 转化为png格式的 add.png文件