NJU静态分析 - Lab8 - 污点分析
分析 在污点分析中,我们需要处理一种特殊的对象:污点对象。这种对象有什么特性呢? 污点对象的上下文为空上下文 污点对象只会在method call中产生 污点对象没有方法,不会引发method call 污点对象的传播方式在普通对象的基础上新增了三种:Base-to-result、Arg-to-base和Arg-to-result 根据上述性质,我们可以设计出污点分...
分析 在污点分析中,我们需要处理一种特殊的对象:污点对象。这种对象有什么特性呢? 污点对象的上下文为空上下文 污点对象只会在method call中产生 污点对象没有方法,不会引发method call 污点对象的传播方式在普通对象的基础上新增了三种:Base-to-result、Arg-to-base和Arg-to-result 根据上述性质,我们可以设计出污点分...
分析 这次的实验非常有意思,实验文档并没有告诉我们该用什么算法、什么函数、什么数据结构去实现Alias-Aware的过程间常量传播,这一切都需要我们自己来设计。我想先从我们需要维护什么关系来入手,从设计数据结构开始,去逐步解决这一难题。 我们需要维护什么关系 这次新增的分析类型大体可分为两类:字段和数组,其中字段又可以分为实例字段和静态字段。由于静态字段可以看作没有别名的实例字段,...
本答案仅供参考,每份bomblab的数据是独一无二的,但思路大致相同 Tips !!!每次gdb中运行run命令之前一定要在explode_bomb函数前打上断点 !!! 在通过几个关卡之后可以把答案存在ans.txt中并用gdb的设置参数功能省去每次输入的麻烦: (gdb) set args ans.txt gdb不需要重新运行...
1. BitXor 函数实现 int bitXor(int x, int y) { return ~(~x & ~y) & ~(x & y); } 函数分析 通过真值表可写出按位异或运算函数:~((~x & ~y) | (x & y)),通过德摩根定律将或运算改为与运算即可。 2. copyLSB 函数实现 int copyLSB(...
分析 算法实现与非上下文敏感的指针分析一致,只需要在创建新对象和进行函数调用时用ContextSelector创建新的上下文即可。ContextSelector的实现也非常简单,对链表进行操作即可。 踩过的坑 堆上下文的层数为\(k-1\),其中\(k\)是ContextSelector的层数 不需要创建新上下文的时候就不要使用ContextSelector,直接用已有指针的上下文
分析 在本次实验中,我们要实现非上下文敏感指针分析,具体来说要实现五个API,分别为:addReachable、addPFGEdge、analysis、propagate和processCall。这五个函数的实现在PPT中均有伪代码,PPT中出现过的部分边不多加赘述。需要分析的是新增的三个类型:静态字段、数组索引和静态方法 静态字段 静态字段的规则很简单,由于一个静态字段T.f是唯一的...
分析 CHABuilder 三个算法在PPT中都有,一步一步实现即可 Edge Transfer 在这一部分,有一些比较有意思的点。首先原本的transferNode函数被分为了transferCallNode和transferNonCallNode,这是为什么呢。在Lab2的Intraprocedual Analysis中,我们将函数调用的返回结果默认为NAC。而在当前的Lab,我...
分析 实验指导中的分析已经非常详尽,新增的类也没有太多难理解的地方,比如新增的If和SwitchStmt都是Stmt的实现,使用方式在Lab2中的DefinitionStmt已经体现。 实现这个Lab你需要完成两个部分,一个是将前两个Lab —— Live Variable Analysis和Constant Propagation的代码填入,并完成Solver和WorkListSolv...
分析 对于算法的分析,课程视频已经讲解地非常清晰,在此不多赘述。重点关注于代码框架的分析 pascal.taie.ir.IR 这个类的每个实例存储了一个Java方法的各种信息,例如变量、参数、语句等。由于我们目前做的是Intraprocedual-analysis,因此我们只需要关注一个IR对象中的信息,在这个Lab中,IR中最重要的信息是其参数,因为目前我们需要将函数参数的Value...
在使用jekyll的Chirpy theme构建个人博客的时候,经常需要commit和push,重复性的劳动是一件很无聊的事,于是想到可以用一个bash脚本去自动化完成这一工作。 脚本 #!/bin/bash REPO_PATH="/path/to/your/repo" LOG_FILE="/path/to/your/log/directory/blog-auto-commit.log"...