【静态分析】【系列1-南大软件分析】2.1 认识Java的Soot静态分析框架(待补充)

Soot是一个强大的Java程序分析和优化框架,主要用于生成中间表示(如Jimple,一种带类型的三地址码)以进行静态分析和优化。它能处理.java、.class和.jimple文件,支持反编译类文件。Soot起初是为了提升Java程序的执行效率,其工作包括类路径管理、文件处理和多种中间表示支持。在科研和企业工作中,Soot常用于Java静态分析任务。
摘要由CSDN通过智能技术生成

前言

Soot 的类型三地址码:Jimple

李樾老师的《软件分析》课程02(Intermediate Representation)中介绍了 3AC(3-Address Code,三地址码),并且使用 Soot 的 IR 举例介绍真实场景下的三地址码:Jimple(typed 3-address code)。

由于 Java 是有类型的,静态分析很多时候要用到语言的类型信息,所以 Java 的三地址码是带类型的,即 typed。

Soot 相关链接

另外李樾老师还提到,在科研工作或企业工作中研究 Java 静态分析时,Soot 是难以避开的一个框架。而且软件分析的课程作业,也是基于 Soot 进行设计。

相关链接:Soot 项目地址Soot 教程地址

Soot 是什么?

Soot 最初的作用

参考文章:Soot为什么经常被用作Instrumentation的Framework?

其实Soot最开始设计的时候,主要目的就是为了对Java字节码程序进行优化,这里的优化就是指执行效率或者运行速度方面的优化。最初设计时,Soot支持三种“中间表示方法”(Intermediate Representation):Baf,Jimple和Grimp。

所以,Soot最初的作用,就是为了提高Java程序的执行效率(由于Java程序和C/C++相比起来,在先天上就执行效率较低)。1999 年编写的最初的文章,最后通过12个大型的benchmarks实验说明,经过Soot处理后,在interpreter中的执行效率提高了8%,在Just-In-Time(JIT)型的编译器中的执行效率提高了21%。

官方旧指南:2008年1.1版本

[Soot学习笔记][3]通过Soot API生成Hello World程序 系列文章记录了一些对 Soot教程 的学习,其中提到了 《A Survivor’s Guide to Java Program Analysis with Soot》,是 Soot 教程指定的发布于 2018 年的旧指南。

旧指南阅读地址,不得不说,47页的英文文档第一次打开让我有些望而生畏,参考文章中提到该指南,这才给了我第二次打开该英文文档的勇气。

化整为零,啃下文档5-7页的第一章导论并不过分吧?慢慢适应英文文档,读完导论在该节写下自己的个人理解即可。

教程入门部分

Introduction:主要介绍处理哪些文件

教程文档地址

处理单个文件: Soot 通常处理一堆类。这些类可以采用以下三种格式之一:

  • Java 源代码,即 .java 文件,
  • Java 字节码,即 .class 文件,以及
  • Jimple 源,即.jimple 文件。

其中 Jimple 是 Soot 的主要中间表示,一个三地址代码,基本上是一种简化的 Java 版本,只需要大约 15 种不同的语句。您可以指示 Soot 将 .java 或 .class 文件转换为 .jimple 文件或反之。

Soot 的类路径: Soot 有自己的类路径,并且只会从该路径上的 JAR 文件或目录加载文件。默认情况下,这个路径是空的。

处理整个目录: 可以使用-process-dir选项使用 Soot 处理整个目录或 JAR 文件。

处理某些类型的文件:

应用程序类与库类: Soot 实际处理的类称为应用程序类。这与库类相反,Soot 不处理库类,仅用于类型解析。应用程序类通常是那些在命令行上明确声明的类,或者那些驻留在通过-process-dir。

Running Soot
Disassembling classfiles(反编译类文件)

Soot 做了哪些工作?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值