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

文章目录

    • 前言
      • Soot 的类型三地址码:Jimple
      • Soot 相关链接
    • Soot 是什么/li>
      • Soot 最初的作用
      • 官方旧指南:2008年1.1版本
      • 教程入门部分
        • Introduction:主要介绍处理哪些文件
        • Running Soot
        • Disassembling classfiles(反编译类文件)
    • Soot 做了哪些工作/li>

前言

Soot 的类型三地址码:Jimple

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

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

Soot 相关链接

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

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

Soot 是什么/h2>

Soot 最初的作用

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

其实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程序 系列文章记录了一些对 的学习,其中提到了 《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 做了哪些工作/h2> 文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览92817 人正在系统学习中

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年4月17日
下一篇 2022年4月17日

相关推荐