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

本文介绍了Soot作为Java优化框架的基本概念,包括其提供的四种中间代码。通过展示如何检查Java配置、下载及测试Soot,以及利用CFGViewer生成控制流程图,深入理解Soot的使用。同时,针对遇到的找不到rt.jar和Classnotequal错误,提供了相应的解决办法。

1、soot的简介

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

2、JAVA配置的检查

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

java -version
javac -version

若配置正确,则结果如下:
在这里插入图片描述

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运行所需的所有依赖包。
在这里插入图片描述

3.2 soot的测试

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

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

出现如下结果说明正确:
在这里插入图片描述

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

在这里插入图片描述

5、常见问题

5.1 找不到rt.jar

出现原因:在JDK9后,rt.jar被移除,所以可能会报这个错
解决方法:将JDK8版本下的rt.jar 移动到JDK11版本下的lib文件夹下,虽然有点粗暴,但是能让程序正常运行
在这里插入图片描述

5.2 Class not equal报错

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

在这里插入图片描述
如果直接在package内部调用java -cp D:/soot.jar soot.tools.CFGViewer -cp . -pp ArrayValuesSource命令生成cfg图则会出现class not equal的错误
在这里插入图片描述
由于该类包含在package内部,将由于无法确定类名而导致无法生成,在这种情况下需要对其进行补全

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

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值