- 环境配置
export SOOT_PATH=/home/jiansun/software/jar/soot-2.5.0.jar
export SOOT_CLASS_PATH=$CLASS_DIR:$JAVA_HOME/jre/lib/rt.jar
# 字节码文件所在的路径
export CLASS_DIR=/home/jiansun/mydemo/javademo
# 字节码文件名
export CLASS_NAME=Employee
- 使用命令生成dot文件
java -cp $SOOT_PATH soot.tools.CFGViewer --soot-class-path $SOOT_CLASS_PATH --graph=BriefBlockGraph $CLASS_NAME
执行完之后会在sootOutPut文件夹下生成 方法名.dot
文件
- 下载graphviz工具来可视化dot文件,在Linux下安装graphviz联网使用命令:
sudo apt-get install graphviz
- 使用dot命令,将dot文件转化为图片,就可以看到流程图了。
dot -Tgif xxxx.dot -o xxxx.gif
下面是快速排序的 Java代码和生成的流程图示例:
使用 soot 反编译生成 Jimple 文件和其他IR
java -cp $SOOT_PATH soot.Main -pp -f J -cp . $CLASS_NAME
反编译完成后,文件被放在sootOutPut文件夹中。
下面是参数说明:
-pp -prepend-classpath 将给定的soot类路径前置到默认的类路径
-f FORMAT -output-format FORMAT Set output format for Soot
J jimple Produce .jimple Files
j jimp Produce .jimp (abbreviated Jimple) files
S shimple Produce .shimple files
s shimp Produce .shimp (abbreviated Shimple) files
B baf Produce .baf files
b Produce .b (abbreviated Baf) files
G grimple Produce .grimple files
g grimp Produce .grimp (abbreviated Grimp) files
X xml Produce .xml Files
n none Produce no output
jasmin Produce .jasmin files
c class (default) Produce .class Files
d dava Produce dava-decompiled .java files
t template Produce .java files with Jimple templates.