![](https://img-blog.csdnimg.cn/998afbeb2ce54eff95e8426de7b3ae41.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
软件分析
文章平均质量分 94
软件分析方向课程\论文等笔记
HiLittleBoat
“看似不起波澜的日复一日,一定会在某一天,让你看到坚持的意义。”
展开
-
【软件分析/静态分析】chapter8 课程11/12 指针分析—上下文敏感(Pointer Analysis - Context Sensitivity)
如下图所示的程序,如果进行上下文不敏感的常量传播分析,id被调用了两次,一次传入的是n1 一次是n2,就会导致 id 方法的参数 n 在不同上下文里的对象混在一起,指针域为{o1, o2},再顺着指针分析传播的时候,通过返回值给x和y,会传递虚假的值,再分析 i 值的时候,会导致i = NAC可所以,原创 2023-09-11 11:13:26 · 521 阅读 · 0 评论 -
【软件分析/静态分析】chapter6 课程08 指针分析(Pointer Analysis)
如何对程序中的堆内存进行建模?因为在程序动态执行时,如果程序中有循环或者递归,堆的对象的数量,理论上是无穷的。如果静态分析去处理无穷的对象,那就不能终止了。为了确保终止,提出了堆抽象技术,动态地将无穷的具体对象 抽象为 方便静态分析的有限的抽象对象(如下图所示,左边的原点表示动态时候产生的对象,随着程序的运行可能会产生无穷无尽的对象,使用堆抽象技术,会把这些动态产生的对象进行抽象,把具有某些共性的对象抽象成一个对象,通过这种抽象的方式限制静态分析处理的对象的个数,从而保证终止。原创 2023-07-09 22:02:53 · 680 阅读 · 0 评论 -
【软件分析/静态分析】chapter5 课程07 过程间分析(Interprocedural Analysis)
会对A及其子类进行dispatch,也就是对A B C D 进行dispatch,对A dispatch的结果就是A,对B dispatch的时候,B没有foo,所以会找其父类,结果也是A,再对B 的子类 C D 分别进行dispatch,结果加入CD,所以答案为 A C D。如下图所示,对Dispatch(B, A.foo()) 是在B里找foo方法,B里没有,就会去其父类A中找,所以是A.foo(),而第二个Dispatch(C, A.foo())是在C里找foo方法,C里又,所以是C.foo()原创 2023-07-08 17:22:21 · 906 阅读 · 0 评论 -
【软件分析/静态分析】chapter4 课程05/06 数据流分析—基础(Data Flow Analysis—Foundations)
目录第四章 数据流分析——基础4.1 从另一个视角看迭代算法(Iterative Algorithm)4.1.1 回顾 May&Forward Analysis 的迭代算法 4.1.2 从另一视角看迭代算法4.2 偏序(Partial Order)4.3 上界和下界(Upper and Lower Bounds)4.4 格, 半格,全格,乘积格4.4.1 格(Lattice)⭐4.4.2 半格(Semilattice)4.4.3 全格(Complete Lattice)⭐==》 top and bottom原创 2023-07-06 21:40:58 · 906 阅读 · 0 评论 -
【软件分析/静态分析】学习笔记01——Introduction
PL (Programming Languages, 程序语言)Static Analysis(静态分析)如下图所示,PL可以分为三个主题:理论、环境和应用理论,但是软件越来越复杂,如何保证大规模复杂程序的安全性、可靠性……?原创 2023-05-24 18:39:10 · 1190 阅读 · 0 评论 -
【软件分析/静态分析】学习笔记02——中间表示Intermediate Representation
这一章先讲了编译器与静态分析器的关系,侧重于了解静态分析处在什么位置,主要运用IR进行静态分析,介绍了AST与IR的不同。什么是三地址码,并通过soot更清楚的认识真实分析中的3AC。介绍CFG的建立步骤,以及Basic Blocks的划分方法,这些静态分析的基础。%5CO。原创 2023-05-28 15:14:06 · 1260 阅读 · 0 评论