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

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

在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Soot是一个Java字节码分析和转换框架,可以用来做很多事情,如代码优化、程序分析、安全检测等。在IntelliJ IDEA中使用Soot需要按照以下步骤进行配置: 1. 下载Soot 你可以从Soot的官网上下载最新版本的Soot,或者从Maven中央仓库中获取Soot的依赖。将Soot的jar包添加到项目依赖中。 2. 配置IntelliJ IDEA 打开IntelliJ IDEA,在项目中添加Soot的jar包。在项目结构中选择“Modules”,然后选择“Dependencies”选项卡,点击“+”按钮添加Soot的jar包。同时,需要在项目的“Run Configuration”中设置Soot的classpath,使Soot可以访问到项目的类文件。 3. 编写Soot分析程序 使用Soot进行字节码分析需要编写Java程序。在程序中,需要设置Soot的Options,如输入文件、要进行的分析等。例如: ``` public static void main(String[] args) { String analysisClass = "com.example.MainClass"; String[] sootArgs = { "-w", // 开启整个程序的分析 "-cp", "target/classes", // 设置classpath "-process-dir", "target/classes", // 设置输入目录 "-app", // 分析整个应用 analysisClass // 分析的类 }; PackManager.v().getPack("wjtp").add(new Transform("wjtp.myTransform", new BodyTransformer() { @Override protected void internalTransform(Body body, String s, Map<String, String> map) { // 分析代码 } })); soot.Main.main(sootArgs); } ``` 4. 运行Soot程序 在IntelliJ IDEA中运行Soot程序,可以在控制台中看到Soot的分析结果。你也可以将分析结果保存到文件中,以便后续分析或可视化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值