soot静态分析
文章平均质量分 79
TheSnowBoy_2
知乎:https://www.zhihu.com/people/wang-kang-84-84/activities
展开
-
Soot -- 路径问题
1.Soot 路径Soot中的相对路径是相对自己而言的,而不是相对于java的。soot中路径如下图 (摘自soot官方):(1)soot这样安排路径也是合理的,毕竟这是soot自己需要接受的参数,soot这样子制定相对于自己的规则,有助于减少于自己对于java的过分逻辑上的依赖。Soot has it’s own classpath and will load原创 2016-06-24 21:35:13 · 1335 阅读 · 0 评论 -
soot基础 -- 解析java文件
问题:soot如何接受java文件,并且将其解析出来?1.首先我构建了一个测试类:public class TestMain { public static void main(String[] args) { C(1); } public static void A(){ System.out.println("inside A"); } public s原创 2016-09-09 10:59:28 · 6883 阅读 · 6 评论 -
soot基础 -- soot 中的处理阶段
1.概述 soot的执行被划分成了很多阶段,这些阶段的名字叫做packs.soot的设计值得学习,通过划分阶段,将每个阶段处理的职责分清楚。同时,也正确的处理了各个阶段的依赖关系。 2.soot阶段图(1)大致的框架 先来看一张总体的框架图: - 输入的起点是Jimple . 因此,必须将要处理的 源代码 转化为 Jimple,才能进行后续的其他的处理。 - Jimple在Soo原创 2016-10-21 21:23:09 · 4159 阅读 · 0 评论 -
soot基础 -- 从头开始创建一个类
原文地址:点击打开链接首先,我们需要创建一个类,为了创建一个类文件(class file),需要下面这些步骤加载 Java.lang.Object 和库类(Library Classes) 加载 java.lang.Object,它是java类层次的根。 当我们通过扩展(extends)Soot的框架时,这步并非是必须的,因为在这种情况下,当用户代码被调用时类文件转载 2016-12-15 14:53:56 · 2329 阅读 · 1 评论 -
soot基础 -- soot中基本的对象
soot有着庞大的类层次结构。这篇文章将给读者介绍扩展soot时候一些非常重要的类。 这里我们主要介绍Body,Unit,Local,Value,UnitBox以及ValueBox的概念。关于body的介绍 在指导手册中,说明了如何创建一个类,Body的概念被简单提到了,这里将进行更详细的介绍。 Soot使用Body来存储一个方法的代码。在Soot中有4种类型的Body–也就是Ba翻译 2016-12-15 12:46:55 · 3336 阅读 · 0 评论 -
soot基础 -- soot的数据结构与java语言的结构
1.前言Soot 是另一种将java语言的结构进行了拆分,然后Soot将拆分之后然后形成了一种面向对象的结构。(KEY)2.弄清 soot内部结构 的3个 关键 问题① Java中语言的结构是什么样子的?② Java中对应成Soot中面向对象的方式是如何表示的?③ 如何从面向对象的角度去查看代码?根据代码能获得哪些信息?3.结构探讨3.1.java语言的结原创 2016-06-22 22:40:55 · 1090 阅读 · 0 评论 -
Soot数据流 -- 数据流框架
1.数据流分析框架关键步骤。个人的问题: 什么叫做数据流分析?为何将下列问题作为关键步骤?关键问题及步骤(soot生存手册中提到):1.1. 决定分析的本质是什么:是否向前后者向后的数据分析?是否考虑分支,还是不进行考虑?等等1.2. 确定自己想进行如何粗略的估计:是可能的分析还是必不可少的分析?从效果上看,你需要决定,在合并通过一个节点的信息的时候,你是需要进行结原创 2016-06-21 22:33:27 · 2977 阅读 · 0 评论 -
soot数据流 -- 基于soot的过程内数据流分析
原文出处程序静态分析程序静态分析(program static analysis)是指在不运行代码的方式下,通过词法分析、语法分析、控制流、数据流分析等技术对程序代码进行扫描,验证代码是否满足规范性、安全性、可靠性、可维护性等指标的一种代码分析技术。(百度百科)静态分析中的xxx-sensitive的一些理解:(此内容来自知乎)xxx-sensitive是指静态转载 2017-01-07 21:53:01 · 5989 阅读 · 1 评论 -
soot基础 -- 常用参数配置
在soot的学习过程中会遇到大量的和配置相关的一些内容,这些内容设置的不正确会很让人感到苦恼,为此做出以下总结。使用soot进行编程的流程基本的流程图如下: 一、参数配置(总述):(包含下面几个大的方面) * 一般配置 * 输入配置 * 输出配置 * 处理配置 * 应用模式的配置 * 输入特性的配置 * 输出特性的配置原创 2016-12-02 16:31:46 · 5159 阅读 · 5 评论 -
soot基础 -- 相关数据结构SootClass,SootMethod,SootBody,Unit的进一步说明
问题 : Soot解析之后的类中到底包含哪些信息呢?当代码被Soot处理之后,得到的类的信息如下:1.上图表示,一个java中类所对应的在soot中的数据结构。2.里面含有成员变量(SootField),以及成员方法(SootMethod)的信息。3.成员方法的数据结构较为复杂,相对于成员变量而言,多了异常类的描述,多了参数以及返回类型,还有其包含的函数主体(SootB原创 2016-07-29 17:19:50 · 3459 阅读 · 0 评论 -
1.soot基础 -- 基本知识
1.注意: soot 安装时,因为java版本问题可能无法找到java中的类,将(java 1.8 换成 1.7即可)2.soot的一些基本知识。2.2.1. Soot 目标提供工具让人们更好的理解程序,让程序更快的进行。2.2.2. Soot 主要优异之处。l 提供了不同的中间表示用来进行不同层次的分析。l 每个等级的中间表示有不同层次的抽象,可用作不同的用途原创 2016-06-21 09:32:57 · 2021 阅读 · 1 评论 -
soot -- 区分是否是java类的代码
代码如下:(根据几个前缀来进行区分) public boolean isJavaLibraryClass() { if (name.startsWith("java.") || name.startsWith("sun.") || name.startsWith("javax.") || name.startsWith("com.sun.") || name.start转载 2016-07-15 17:25:00 · 652 阅读 · 0 评论 -
soot 加入自己的阶段转换
代码import java.io.File;import java.util.ArrayList;import java.util.Collections;import java.util.HashMap;import java.util.List;import android.content.pm.PackageManager;import soot.Scene;import转载 2016-10-22 15:24:47 · 2250 阅读 · 0 评论 -
soot中存在的主要对象、soot的执行流
Soot中的结构本篇内容简单概括一下:soot中存在的主要对象、soot的执行流。Soot中提供了几种对象,分别是:Scene、SootClass、SootMethod、SootField、Body。表示的意义如下所示:Scene:Scene表示完整的分析环境,可以通过Scene.v()调用设置Options的API,也可以获取一些过程间分析的信息,如call graphs和p转载 2016-10-22 14:19:42 · 3848 阅读 · 0 评论 -
Soot生成控制流图
原文出处: 原文Soot是McGill大学的Sable研究小组自1996年开始开发的Java字节码分析工具,它提供了多种字节码分析和变换功能,通过它可以进行过程内和过程间的分析优化,以及程序流图的生成,还能通过图形化的方式输出,让用户对程序有个直观的了解。尤其是做单元测试的时候,可以很方便的通过这个生成控制流图然后进行测试用例的覆盖,显著提高效率。 如果是将Soot当作简单工具转载 2016-10-21 21:27:38 · 8266 阅读 · 3 评论 -
Soot -- 关于语句图(UnitGraph)的说明
代码中有说明: private static void testCFG2(SootMethod method) { // 1.获得方法体。 Body b = method.retrieveActiveBody(); System.out.println(b.toString()); //2.将方法体中的语句组织成图的形式。(一个方法中更像是一棵树)【语句之间的逻辑关系建立】原创 2016-09-09 17:34:53 · 3135 阅读 · 1 评论 -
Soot -- Soot中的一些语句细节
1.Soot中语句中如何判断是否是调用语句?见如下代码:作者会将java代码等,一般转换为Jimple的中间形式。(Jimple可以说是Soot的一个核心)所以对于当我们想获得的信息,最好都从与Jimple相关的对象中获得。(Soot中对于Jimple这种中间的形式进行了对象的建模,从而用对象的形式模拟出Jimple语言中的语句) private static void testC原创 2016-09-09 21:04:59 · 2092 阅读 · 0 评论 -
Soot -- 中间代码Jimple介绍
一、Jimple总述jimple是一种中间代码 1.jimple设计的目的: 用来简化分析,以及简化向java字节码的过渡。 2.不同中间代码之间的转化图。 (下图有些旧,但思想很好。) (1)与java代码相关: - 图中可以看出,我们可以进行编译以及反编译。【针对java】 - 我们可以将java通过一种编译方式(javac),将其转换为 .class文件。【针对jav原创 2016-10-16 22:07:14 · 10174 阅读 · 2 评论 -
soot数据流 -- 指向分析(points-to)
一、基本的介绍1.指向分析的目标给定一个变量的函数,计算其可能的类型,指向信息。 2.意义:指向分析为其他的分析提供了支持。(比如,别名分析(Alias analysis),以及提高call graph的准确度) 3.构建框架3.1.必要的接口 soot提供了PointsToAnalysis ,PointsToSet接口。任何一个指向的分析都应该实现这两个接口。 PointsToAnalysi翻译 2016-11-30 22:11:10 · 4597 阅读 · 2 评论 -
soot异常 -- Failed to load java.lang.CharSequence
原因soot中需要使用一定的jre中的内容的。如果版本不能满足要求,则会出现无法加载需要的类的异常。解决办法换一个java版本编译,运行soot. (在eclipse中,我是通过对soot项目设置单独的编译器(java7),然后重新对soot项目进行编译解决这个问题的 )原创 2016-12-05 16:27:24 · 2076 阅读 · 0 评论