soot的配置以及常见问题的记录

1、soot的简介

简单来说,soot是java优化框架,提供4种中间代码来分析和转换字节码。
官方文档地址: https://github.com/Sable/soot/wiki

2、JAVA配置的检查

为了后续的演示,在对soot进行配置之前,最好先对java的配置进行一个测试(我这边用的是JDK11)
首先 win + R + cmd 打开命令行,输入命令如下

java -version
javac -version

若配置正确,则结果如下:
soot的配置以及常见问题的记录_第1张图片

3、soot的下载与测试

3.1 soot的下载

首先贴一下下载链接:https://soot-build.cs.uni-paderborn.de/public/origin/master/soot/soot-master/
自己挑选个版本,我这边下的是3.1.0,然后下载里面的build/sootclasses-trunk-jar-with-dependencies.jar,这个文件包含soot运行所需的所有依赖包。
soot的配置以及常见问题的记录_第2张图片

3.2 soot的测试

下载后可以输入如下代码进行测试
(这里为了方便,我将sootclasses-trunk-jar-with-dependencies.jar重命名为了soot.jar,并将其放在了d盘下,可以自行更改)

java -cp D:\soot.jar soot.Main -version

出现如下结果说明正确:
soot的配置以及常见问题的记录_第3张图片

4、使用soot.cfgViewer进行测试

4.1 写个Hello测试类

首先写个Hello类,如下所示

public class Hello{
	public static void main(String args[]){
		System.out.println("helloworld");
	}
}

4.2 编译生成class文件

在cmd命令行下输入:

javac Hello.java

在这里插入图片描述

4.3 生成cfg文件

使用命令调用soot的CFG工具包生成dot格式的控制流程图
这里注意一个点,如果在javac编译生成class文件后更改JDK的版本,就会出现错误

java -cp D:/soot.jar soot.tools.CFGViewer -cp . -pp Hello

soot的配置以及常见问题的记录_第4张图片

5、常见问题

5.1 找不到rt.jar

出现原因:在JDK9后,rt.jar被移除,所以可能会报这个错
解决方法:将JDK8版本下的rt.jar 移动到JDK11版本下的lib文件夹下,虽然有点粗暴,但是能让程序正常运行
soot的配置以及常见问题的记录_第5张图片

5.2 Class not equal报错

对于在package内部的java类(如下图所示)

soot的配置以及常见问题的记录_第6张图片
如果直接在package内部调用java -cp D:/soot.jar soot.tools.CFGViewer -cp . -pp ArrayValuesSource命令生成cfg图则会出现class not equal的错误
soot的配置以及常见问题的记录_第7张图片
由于该类包含在package内部,将由于无法确定类名而导致无法生成,在这种情况下需要对其进行补全

java -cp D:\soot.jar soot.tools.CFGViewer -cp . -allow-phantom-refs -pp apache.tools.ant.AntTypeDefinition

在这里插入图片描述

你可能感兴趣的:(项目配置,java,经验分享)