Skye-ye's Blog

NJU静态分析 - Lab8 - 污点分析

分析 在污点分析中,我们需要处理一种特殊的对象:污点对象。这种对象有什么特性呢? 污点对象的上下文为空上下文 污点对象只会在method call中产生 污点对象没有方法,不会引发method call 污点对象的传播方式在普通对象的基础上新增了三种:Base-to-result、Arg-to-base和Arg-to-result 根据上述性质,我们可以设计出污点分...

NJU静态分析 - Lab7 - Alias-Aware的过程间常量传播

分析 这次的实验非常有意思,实验文档并没有告诉我们该用什么算法、什么函数、什么数据结构去实现Alias-Aware的过程间常量传播,这一切都需要我们自己来设计。我想先从我们需要维护什么关系来入手,从设计数据结构开始,去逐步解决这一难题。 我们需要维护什么关系 这次新增的分析类型大体可分为两类:字段和数组,其中字段又可以分为实例字段和静态字段。由于静态字段可以看作没有别名的实例字段,...

NJU静态分析 - Lab6 - 上下文敏感指针分析

分析 算法实现与非上下文敏感的指针分析一致,只需要在创建新对象和进行函数调用时用ContextSelector创建新的上下文即可。ContextSelector的实现也非常简单,对链表进行操作即可。 踩过的坑 堆上下文的层数为\(k-1\),其中\(k\)是ContextSelector的层数 不需要创建新上下文的时候就不要使用ContextSelector,直接用已有指针的上下文

NJU静态分析 - Lab5 - 非上下文敏感指针分析

分析 在本次实验中,我们要实现非上下文敏感指针分析,具体来说要实现五个API,分别为:addReachable、addPFGEdge、analysis、propagate和processCall。这五个函数的实现在PPT中均有伪代码,PPT中出现过的部分边不多加赘述。需要分析的是新增的三个类型:静态字段、数组索引和静态方法 静态字段 静态字段的规则很简单,由于一个静态字段T.f是唯一的...

NJU静态分析 - Lab2 - 常量传播和WorkList求解器

分析 对于算法的分析,课程视频已经讲解地非常清晰,在此不多赘述。重点关注于代码框架的分析 pascal.taie.ir.IR 这个类的每个实例存储了一个Java方法的各种信息,例如变量、参数、语句等。由于我们目前做的是Intraprocedual-analysis,因此我们只需要关注一个IR对象中的信息,在这个Lab中,IR中最重要的信息是其参数,因为目前我们需要将函数参数的Value...