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

Posted pumpkin.zhu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了静态分析系列1-南大软件分析2.1 认识Java的Soot静态分析框架(待补充)相关的知识,希望对你有一定的参考价值。

文章目录

前言

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 做了哪些工作?

以上是关于静态分析系列1-南大软件分析2.1 认识Java的Soot静态分析框架(待补充)的主要内容,如果未能解决你的问题,请参考以下文章

静态分析系列1-南大软件分析1.0 导论学习笔记

FineBI学习系列之FineBI与南大通用Gbase 8A数据连接(图文详解)

Jmeter_初步认识随笔

vue系列--- 认识Flow

dubbo源码分析-从xml到我们认识的Java对象

南大算法设计与分析课程OJ答案