文件名称:中间表示-云上网络架构设计及解决方案
文件大小:1.67MB
文件格式:PDF
更新时间:2024-07-11 14:11:52
程序分析 软件测试 soot
3.4 中间表示 Soot 的主要优点之一就是它为代码的分析提供了四种中间表示 (Intermediate Representation):Baf、Grimp、Jimple、Shimple。每一种中间 表示根据不同的代码分析要求对 Java 代码有不同级别的抽象:Baf 是一种 类似于 Java 字节码的表示形式,Jimple 是一种适合于大部分分析的无栈的 三地址格式的表示形式。下面对这四种中间表示进行说明,其中重点描述 Jimple。 3.4.1 Baf Baf 是一种改进的基于栈的字节码的表示,用于基于栈的 Java 字节码 的检测,但是它抽象掉了常数池并且把基于不同类型的多种指令抽象成了 一种指令(比如:在 Java 字节码中对于整型数、长整型数的加法有许多多 指令,而在 Baf 中它只抽象成一种用于加法的指令)。Baf 中的指令对应于 Soot Unit,因此 Baf 所有指令的实现都要实现 Inst(Inst 接口实现了 Unit 和 Switchable 两个接口)。 Baf表现的实现在 soot.baf 和 soot.baf.internal 两个包中。Baf 对像窥孔 最优化(Peephole Optimization)这样基于字节码的分析,优化和变换的很 有用。Soot 框架中基于 Baf 表示的优化的部分在 soot.baf.toolkits.base 包中。 3.4.2 Jimple Jimple 是 Soot 中的主要的中间表示。Jimple 是一种基于类型的 3 地址 格式语句的中间表示。Jimple 中间表示可以直接从 Soot 生成或者基于 Java 源码(JDK1.4 以上包括 JDK1.4)和 Java 字节码/Java 类文件(JDK5 以上 包括 JDK5)。 通过给隐式的栈存储单元引入新的局部变量和利用子程序移除 JSR