- 環(huán)境配置
export SOOT_PATH=/home/jiansun/software/jar/soot-2.5.0.jar
export SOOT_CLASS_PATH=$CLASS_DIR:$JAVA_HOME/jre/lib/rt.jar
# 字節(jié)碼文件所在的路徑
export CLASS_DIR=/home/jiansun/mydemo/javademo
# 字節(jié)碼文件名
export CLASS_NAME=Employee
- 使用命令生成dot文件
java -cp $SOOT_PATH soot.tools.CFGViewer --soot-class-path $SOOT_CLASS_PATH --graph=BriefBlockGraph $CLASS_NAME
? 執(zhí)行完之后會(huì)在sootOutPut文件夾下生成 方法名.dot
文件
生成dot文件
- 下載graphviz工具來可視化dot文件逸吵,在Linux下安裝graphviz聯(lián)網(wǎng)使用命令:
sudo apt-get install graphviz
- 使用dot命令读处,將dot文件轉(zhuǎn)化為圖片腕扶,就可以看到流程圖了。
dot -Tgif xxxx.dot -o xxxx.gif
? 下面是快速排序的 Java代碼和生成的流程圖示例:
快速排序流程圖
使用 soot 反編譯生成 Jimple 文件和其他IR
java -cp $SOOT_PATH soot.Main -pp -f J -cp . $CLASS_NAME
反編譯完成后荡短,文件被放在sootOutPut文件夾中涎才。
下面是參數(shù)說明:
-pp -prepend-classpath 將給定的soot類路徑前置到默認(rèn)的類路徑
-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.