使用soot生成程序流程图和IR文件


  1. 环境配置
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
  1. 使用命令生成dot文件
java -cp $SOOT_PATH soot.tools.CFGViewer --soot-class-path $SOOT_CLASS_PATH --graph=BriefBlockGraph $CLASS_NAME

​ 执行完之后会在sootOutPut文件夹下生成 方法名.dot 文件

使用soot生成程序流程图和IR文件_第1张图片
生成dot文件

  1. 下载graphviz工具来可视化dot文件,在Linux下安装graphviz联网使用命令:
 sudo apt-get install graphviz
  1. 使用dot命令,将dot文件转化为图片,就可以看到流程图了。
dot -Tgif xxxx.dot -o xxxx.gif

​ 下面是快速排序的 Java代码和生成的流程图示例:


使用soot生成程序流程图和IR文件_第2张图片
快速排序流程图

使用 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. 

你可能感兴趣的:(使用soot生成程序流程图和IR文件)