静态分析
文章平均质量分 74
raintungli
这个作者很懒,什么都没留下…
展开
-
静态代码分析-概念:敏感性
静态代码分析-概念:敏感性原创 2022-05-06 14:33:38 · 787 阅读 · 0 评论 -
JVM C1 编译优化:空检查擦除
1. 什么是空检查在Java里经常会判断一个对象是否为空,如果为空的对象访问方法,字段会抛出空指针异常,而空指针异常为运行异常,如果不抓取这个异常,有的时候会导致程序异常,为了解决这个问题,我们通常会在代码里显式的去判断该对象是否为空,进行为空的逻辑处理,这种做法逻辑虽然明确,但是由于空的逻辑并不是经常碰到,这样会导致有多余的逻辑分支判断。2. 隐式空检查 implicit exception我们先来看一个代码:public static int nullCheck(String valu原创 2020-10-19 18:52:43 · 4377 阅读 · 0 评论 -
JVM C1 编译优化:合并相同的表达式-Global Value Numbering 之实现
1. 原因为了合并相同的运算,避免重复计算,通常在编译过程中,编译器会尝试合并相同的计算。C1在初始的时候内部会构建图结构的HIR,它由基本块BB构成一个控制流图,每个基本块里面是SSA形式的指令。单个BB块中通过ValueNumbering 来实现,多个BB块里实现的合并叫做Global Value Numbering ,但其算法的本质是一致的。2. 值编号 Value Numbering值编号(Value numbering):是指为每个SSA的instruction计算一个Hash原创 2020-09-25 16:36:07 · 1033 阅读 · 1 评论 -
Soot 静态分析框架(七)模块分析
Java 9里开始支持模块化,以一个独立的开源项目jigsaw而来, 具体可以参考链接,https://openjdk.java.net/projects/jigsaw/ 同时也可以参考JSR376标准1. module-info 分析在模块化的时候,需要构建module_info.java来声明模块之间的关系,在Module声明里面定义了requires ,exports...原创 2020-01-15 17:29:29 · 2046 阅读 · 0 评论 -
Soot 静态分析框架(六)数据流指向分析
1. 数据流指向分析1.1 指向分析指向分析,给定一个变量的函数,计算其可能的类型,指向信息,指向分析可以帮助其它的分析。1.2 Soot的指向分析框架soot提供了PointsToAnalysis ,PointsToSet接口。任何一个指向的分析都应该实现这两个接口。PointsToAnalysis 方法reachingObjects(Local l),该方法可以返回指向参...原创 2019-10-19 10:00:03 · 3253 阅读 · 0 评论 -
Soot 静态分析框架(五)Annotation 的实现
1. Annotation的实现1.1 Java实现的Annotationjava 的自定义注解实现,通常我们会先自定义一个注解 import java.lang.annotation.ElementType; import java.lang.annotation.*; @Target({ElementType.TYPE,ElementType.FI...原创 2019-10-19 09:06:53 · 1133 阅读 · 0 评论 -
soot 静态分析框架(四)Soot lambda 构建
1. JVM 的 Lambda构建和JVM构建Lambda的方式不同,因为Lambda表达式的类是一个运行的时候动态生成的类,是通过新的JVM的指令集InvokeDynamic来实现,通过调用java/lang/invoke/LambdaMetafactory.metafactory去生成动态的内部Class,在Class里面封装了实现的抽象方法,在抽象方法里实现了对源类的静态方法packag...原创 2019-10-19 08:54:39 · 1012 阅读 · 0 评论 -
Soot 静态分析框架(三)Soot 过程分析
3.1Soot构建语法树Soot通过objectweb来进行字节码构建成语法树首先scene会去查找一些基础的JVM的类基础的对象Object, Boolean, Void, Integer, Long, Float等 字符串操作:String, StringBuffer的类 Exception, Throwable,以及一些常见的Error类 线程相关的, Thre...原创 2019-09-26 15:30:38 · 7504 阅读 · 0 评论 -
Soot 静态分析框架(二)Soot的核心
2. Soot核心BodyBody 是对应的是Java一个函数体,Body是Soot的核心,Graph、Flow的构建都是基于Body进行分析,当然你可以基于不同的IR语言构建不同的Body,soot提供了JimpleBody,ShimpleBody, GrimpBody,当然soot主要是基于Jimple进行分析,在流程中构建的是JimpleBody,其它的Body的构建需要通过开关来控制...原创 2019-09-26 15:18:34 · 3232 阅读 · 3 评论 -
Soot 静态分析框架(一)整体框架
1. Soot 静态分析框架Soot核心对象分别是:Scene、SootClass、SootMethod、SootField、Body。1.1 SceneScene:Scene表示完整的分析环境,可以通过Scene.v()调用设置Options的API,也可以获取一些过程间分析的信息,如call graphs, points-to informati...原创 2019-09-26 15:10:47 · 4932 阅读 · 1 评论