阅读笔记 | The Soot framework for Java program analysis:a retrospective

Soot是一款强大的Java程序分析和优化工具,它提供了简化三地址中间表示Jimple,支持数据流分析和调用图生成。文章回顾了Soot的发展,介绍了其过程内和过程间的特性,如指针分析、副作用分析,并讨论了如何扩展和使用Soot进行程序分析。
摘要由CSDN通过智能技术生成

Soot经常用于对代码或者 日志的静态分析或动态分析。它是一款用于分析和优化Java 程序的软件工程工具。它可以提供Call Graph,程序内的数据分析。为了进行程序内的数据分析,它在一个叫做UnitGraph的控制流图上进行操作。


摘要

这篇文章描述了soot工具的特点,总结了它的发展过程,讨论了对程序分析框架有用的功能。


1. Introduction

soot工具是从2000年发布的,可以用来建立对java代码的静态分析工具,已经被广泛应用于各种程序转换工具、指针分析、并发程序分析、符号执行以及静态和动态混合分析方法中的静态分析部分。

从本质上讲,soot就是一个编译器,它能把JVM字节码或者java源代码转化为java字节码。下图描述了soot的工作流程。研究人员可以通过分析或者转换soot的中间表示来扩展soot。

在这里插入图片描述

soot主要包含以下特征:

  1. 可以生成java字节码的简化三地址中间表示;
  2. 具有大量的指针分析(指针分析关注的是一个变量可以指向哪些对象)和函数调用图生成算法;
  3. 能够生成可执行的java字节码。

2. SOOT FEATURES

这部分讨论了soot框架的特征,以及关于soot输出分析和转化结果的一些规定,并且提到了关于这些特征的应用。

A. Intraprocedural Features

Soot的基本中间表示形式是Jimple,是一种(typed,简化的?被修改的?有类型的?)三地址编码。直接分析Java字节码具有很大的难度(虽然可以为Java字节码建立控制流图,但是它隐式的堆栈结构掩盖了数据的流动),因此研究人员创建了Jimple。例如,给定一个字节码指令s,我们很难确定是先前的哪个s’生成了s的基于堆栈的输入。而Jimple将数据存储在已命名的本地变量中,而不是在隐式的堆栈中,这使得本地数据流更加明显。在Jimple中,本地变量将根据“定义-使用链”来划分。

Soot还包含其他的中间表示形式,例如Shimple(一种基于SSA的Jimple),Baf和Grimple(用来输出字节码),Dava(一种基于ast的中间表示,通过反编译Jimple指令得到)。

许多soot的使用者希望将他们的分析结果和java源代码对应起来,而soot可以很方便地提取类和方法的名字,因为java字节码包含了类和方法结构的源代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值