├── 01.Course-Introduction.md ├── 02.Intermediate-Representation.md ├── 03.Data-Flow-Analysis-I.md ├── 04.Data-Flow-Analysis-II.md ├── 05.Data-Flow-Analysis-Foundations-I.md ├── 06.Data-Flow-Analysis-Foundations-II.md ├── 07.Interprocedural-Analysis.md ├── 08.Pointer-Analysis.md ├── 09.Pointer-Analysis-Foundations-I.md ├── 10.Pointer-Analysis-Foundations-II.md ├── 11.Pointer-Analysis-Context-Sensitivity-I.md ├── 12.Pointer-Analysis-Context-Sensitivity-II.md ├── 13.Static-Analysis-For-Security.md ├── 14.Datalog-Based-Program-Analysis.md ├── 15.IFDS.md ├── 16.Soundiness.md ├── README.md ├── picture ├── 1-1.png ├── 1-2.png ├── 1-3.png ├── 1-4.png ├── 1-5.png ├── 1-6.png ├── 1-7.png ├── 1-8.png ├── 10-1.png ├── 10-2.png ├── 10-3.png ├── 11-1.png ├── 11-2.png ├── 11-3.png ├── 11-4.png ├── 11-5.png ├── 11-6.png ├── 11-7.png ├── 12-1.png ├── 12-10.png ├── 12-11.png ├── 12-12.png ├── 12-13.png ├── 12-14.png ├── 12-15.png ├── 12-2.png ├── 12-3.png ├── 12-4.png ├── 12-5.png ├── 12-6.png ├── 12-7.png ├── 12-8.png ├── 12-9.png ├── 13-1.png ├── 13-10.png ├── 13-11.png ├── 13-12.png ├── 13-13.png ├── 13-14.png ├── 13-2.png ├── 13-3.png ├── 13-4.png ├── 13-5.png ├── 13-6.png ├── 13-7.png ├── 13-8.png ├── 13-9.png ├── 14-1.png ├── 14-10.png ├── 14-11.png ├── 14-12.png ├── 14-13.png ├── 14-14.png ├── 14-15.png ├── 14-16.png ├── 14-17.png ├── 14-18.png ├── 14-19.png ├── 14-2.png ├── 14-20.png ├── 14-21.png ├── 14-22.png ├── 14-3.png ├── 14-4.png ├── 14-5.png ├── 14-6.png ├── 14-7.png ├── 14-8.png ├── 14-9.png ├── 15-1.png ├── 15-10.png ├── 15-11.png ├── 15-12.png ├── 15-13.png ├── 15-14.png ├── 15-15.png ├── 15-16.png ├── 15-2.png ├── 15-3.png ├── 15-4.png ├── 15-5.png ├── 15-6.png ├── 15-7.png ├── 15-8.png ├── 15-9.png ├── 16-1.png ├── 16-10.png ├── 16-11.png ├── 16-12.png ├── 16-13.png ├── 16-2.png ├── 16-3.png ├── 16-4.png ├── 16-5.png ├── 16-6.png ├── 16-7.png ├── 16-8.png ├── 16-9.png ├── 2-1.png ├── 2-2.png ├── 2-3.png ├── 2-4.png ├── 2-5.png ├── 2-6.png ├── 2-7.png ├── 2-8.png ├── 2-9.png ├── 3-1.png ├── 3-10.png ├── 3-11.png ├── 3-12.png ├── 3-13.png ├── 3-3.png ├── 3-4.png ├── 3-5.png ├── 3-6.png ├── 3-8.png ├── 3-9.png ├── 4-1.png ├── 4-2.png ├── 4-3.png ├── 4-4.png ├── 4-5.png ├── 4-6.png ├── 4-7.png ├── 4-8.png ├── 5-1.png ├── 5-10.png ├── 5-11.png ├── 5-12.png ├── 5-13.png ├── 5-14.png ├── 5-15.png ├── 5-2.png ├── 5-3.png ├── 5-4.png ├── 5-5.png ├── 5-6.png ├── 5-7.png ├── 5-8.png ├── 5-9.png ├── 6-1.png ├── 6-10.png ├── 6-11.png ├── 6-2.png ├── 6-3.png ├── 6-4.png ├── 6-5.png ├── 6-6.png ├── 6-7.png ├── 6-8.png ├── 6-9.png ├── 7-1.png ├── 7-10.png ├── 7-11.png ├── 7-12.png ├── 7-13.png ├── 7-14.png ├── 7-2.png ├── 7-3.png ├── 7-4.png ├── 7-5.png ├── 7-6.png ├── 7-7.png ├── 7-8.png ├── 8-1.png ├── 8-10.png ├── 8-11.png ├── 8-12.png ├── 8-2.png ├── 8-3.png ├── 8-4.png ├── 8-5.png ├── 8-6.png ├── 8-7.png ├── 8-8.png ├── 8-9.png ├── 9-1.png ├── 9-2.png ├── 9-3.png ├── 9-4.png ├── 9-5.png ├── 9-6.png ├── 9-7.png └── 9-8.png └── thinking.md /01.Course-Introduction.md: -------------------------------------------------------------------------------- 1 | - [Course Introduction](#head1) 2 | - [PL and Static Analysis](#head2) 3 | - [Why We Lean Static Analysis](#head3) 4 | - [What is Static Analysis](#head4) 5 | - [Static Analysis Features and Examples](#head5) 6 | - [ soundness](#head6) 7 | - [ 如何实现](#head7) 8 | - [ 一个栗子](#head8) 9 | - [ 精度与速度平衡](#head9) 10 | - [Teaching Plan](#head10) 11 | - [Evalution Criteria](#head11) 12 | # Course Introduction 13 | 14 | 15 | ## PL and Static Analysis 16 | 17 | 18 | 19 | ## Why We Lean Static Analysis 20 | 21 | 22 | ## What is Static Analysis 23 | 24 | 25 | 26 | Rice's theorem表示,静态分析对于一些有意义的分析,不能得出 exact answer 27 | 28 | ## Static Analysis Features and Examples 29 | 30 | ### soundness 31 | 32 | 33 | Rice's Theorem对于non-trivial properties不存在精确答案。所以就有了sound、complete两个概念。 34 | 35 | 36 | 37 | 因为不存在exact answer,所以有两个选择: 38 | - 妥协soundness,存在漏报 39 | - 妥协compeleness,存在误报 40 | 41 | 静态分析一般的应用是compromise completeness的,及是sound的,可以有误报,但不能漏报。比如做一些bug的检测,宁可信其有,不可信其无,限定可能范围,排查错误。 42 | 43 | ### 如何实现 44 | 在技术上实现 : Abstraction + Over-approximation 45 | - Abstraction 抽象数据域 46 | - Over-approximation 47 | - Transfer functions 抽象数据在语句的转换 48 | - Control flows 抽象数据在控制流上的转换 49 | 50 | ### 一个栗子 51 | 52 | 53 | 54 | 55 | ### 精度与速度平衡 56 | Static analysis:ensure(or get close to)soundness, while making good trade-offs between analysis precision and analysis speed. 57 | 58 | 59 | ## Teaching Plan 60 | 61 | 62 | ## Evalution Criteria 63 | -------------------------------------------------------------------------------- /02.Intermediate-Representation.md: -------------------------------------------------------------------------------- 1 | - [Intermediate Representation](#head1) 2 | - [Compilers and Static Analyzers](#head2) 3 | - [AST vs. IR](#head3) 4 | - [IR: Three-Address Code (3AC)](#head4) 5 | - [3AC in Real Static Analyzer : Soot](#head5) 6 | - [Static Single Assignment (SSA)](#head6) 7 | - [Basic Blocks (BB)](#head7) 8 | - [Control Flow Graphs (CFG)](#head8) 9 | # Intermediate Representation 10 | 11 | ## Compilers and Static Analyzers 12 | 13 | 14 | 15 | ## AST vs. IR 16 | 17 | 18 | 19 | ## IR: Three-Address Code (3AC) 20 | 21 | 22 | 23 | 24 | 25 | ## 3AC in Real Static Analyzer : Soot 26 | 27 | ``` 28 | Jvm中的四种调用,在Jvm中invokespecial对应Jimple中specialinvoke 29 | invokespecial:call constructor, call superclass methods, call private methods 30 | invokevirutal:instance methods (virtual dispatch,找真正执行的函数) 31 | invokeinterface: cannot optimization(不做一些优化), checking interface implementation(检查interface的函数是否实现) 32 | invokestatic:call static methods 33 | 34 | Java 7:invokedynamic -> Java static typing,dynamic language runs on JVM. 35 | 36 | clinit函数,类的静态成员的初始化 37 | ``` 38 | 39 | ## Static Single Assignment (SSA) 40 | 41 | 42 | 43 | 44 | 45 | ## Basic Blocks (BB) 46 | 47 | BB对于整个指令序列,单指令入口,单指令出口 48 | 49 | 50 | 51 | ## Control Flow Graphs (CFG) 52 | 53 | 54 | 55 | 再加上函数的Entry和Exit边 56 | 57 | BB关系:Successor、predecessor 58 | 59 | -------------------------------------------------------------------------------- /03.Data-Flow-Analysis-I.md: -------------------------------------------------------------------------------- 1 | - [Data Flow Analysis I](#head1) 2 | - [Overview of Data Flow Analysis](#head2) 3 | - [Preliminaries of Data Flow Analysis](#head3) 4 | - [Reaching Definitions Analysis](#head4) 5 | - [Reaching Definitions的定义](#head5) 6 | - [用bit vectors去表示是否可达](#head6) 7 | - [Transfer function and Control flow](#head7) 8 | - [ 算法](#head8) 9 | - [ 栗子](#head9) 10 | - [ 为什么会最终不变](#head10) 11 | # Data Flow Analysis I 12 | 13 | ## Overview of Data Flow Analysis 14 | 15 | safe-approximation针对不同应用情况分为may analysis 或 must analysis。 16 | 17 | ## Preliminaries of Data Flow Analysis 18 | 19 | 20 | 对于merge点进行meet operator,可以是union或intersection等集合操作 21 | 22 | 23 | 24 | 对于数据流分析,可以顺着数据流方向分析,也可以逆向,看具体应用。 25 | 26 | ## Reaching Definitions Analysis 27 | 28 | ### Reaching Definitions的定义 29 | 30 | 31 | ### 用bit vectors去表示是否可达 32 | 33 | 34 | ### Transfer function and Control flow 35 | 36 | 37 | - Transfer function 38 | - gen ,在这表示生成的Def 39 | - kill ,在这表示新的定义 40 | - Control flow 41 | - 通过union操作,merge操作 42 | 43 | 44 | 45 | 抽象的域是di的集合,是每一个指令是否能到达哪些BB。 46 | 47 | 我的理解:对于kill,是可以kill掉后面的,这个可以理解为如果后面有一BB能goto当前BB的入口,则kill掉,如果没有,也不会影响。 48 | 49 | ### 算法 50 | 51 | 52 | 53 | 这个迭代算法结构,可以应用到其他的算法中。 54 | 55 | ### 栗子 56 | 57 | 58 | - 我理解,一些细节注意的点 59 | - 多次迭代,是对于for(each basic block B\entry) 60 | - 对于每一个bb,gen、kill是固定的 61 | - 为什么会变,因为(1)为前提,比如在B1->B2的merge,第一次是 0000 U OUT[B1],而第二次的时候,B4的值不再是初始值,所以会变。进而导致OUT[B2]变化,进而影响后面的BB。但观察对于OUT[B4]后面会稳定到一个值(第二到第三次迭代),IN[B2]稳定,进而,后续的稳定。 62 | - 这种遍历方式,与编写程序会有一些理解上的差异,比如while的边,B4->B2的边,我不会再一次遍历中,重新更新B2。而是以下次迭代来表示这个循环。 63 | 64 | 65 | 66 | ### 为什么会最终不变 67 | 68 | 对于一个BB,gen、kill是固定的,当有新facts的进入的分支(之前进来的为初始化vector,经过迭代后进来的新的),对于OUT[S]的vector中1只增不减,是单调的。 69 | 70 | 当所以fact经过多次迭代,都到达了IN[S],则OUT[S]不会变了。 71 | -------------------------------------------------------------------------------- /04.Data-Flow-Analysis-II.md: -------------------------------------------------------------------------------- 1 | - [Data Flow Analysis II](#head1) 2 | - [Live Variables Analysis](#head2) 3 | - [ 定义](#head3) 4 | - [transfer func and control flow merge](#head4) 5 | - [ 算法](#head5) 6 | - [ 栗子](#head6) 7 | - [Available Expressons Analysis](#head7) 8 | - [ 定义](#head8) 9 | - [transfer func and control flow merge](#head9) 10 | - [ 算法](#head10) 11 | - [ 三种算法对比](#head11) 12 | # Data Flow Analysis II 13 | 14 | ## Live Variables Analysis 15 | ### 定义 16 | 17 | 18 | 应用:determine whether the variable v in some register R is live. 19 | 20 | ### transfer func and control flow merge 21 | 22 | 23 | ### 算法 24 | 25 | 26 | 我的一些思考: 27 | - 为什么初始化是 for(each basic block B\exit) {IN[B]=Φ} 28 | - 逆向求解,对于一个BB,merge是用后继的IN,求OUT[BB]。然后通过Transfer(OUT[BB]) = IN[BB],所以我们需要的是所有BB的IN,才能获取前驱的OUT,所以初始化的是IN[B] = Φ。 29 | - 对于一个BB,正向与逆向merge位置的区别 30 | - 对于每个BB,都有自己的IN、OUT。只有两个BB是彼此唯一的前驱或者后继,才会有直接前驱的OUT等于后继的IN。对于一个待求解的BB,当是多对一的时候,是通过merge这个近似操作,来做到前驱的OUT等于后继的IN(正向)。这个细节需要思考。 31 | 32 | ### 栗子 33 | 34 | 35 | 36 | ## Available Expressons Analysis 37 | ### 定义 38 | 39 | 40 | ### transfer func and control flow merge 41 | 42 | 43 | 注意右下角这种,对于avaliable expression的需求来说,虽然x被重新赋值,但是在c = ..这点,仍然满足需求,可以用之前该expression,用于该点。 44 | 45 | ### 算法 46 | 47 | 48 | must analyse的特点 49 | 50 | - for(each basic block B\entry) {OUT[B] = U},初始化为U,全部 51 | - merge 操作是intersection 52 | 53 | 从需求上理解,对于当前BB,该expression可用,必须保证所有IN[BB],都可用,才能达到safe-approximation,所以是intersection 54 | 55 | ## 三种算法对比 56 | 57 | 58 | -------------------------------------------------------------------------------- /05.Data-Flow-Analysis-Foundations-I.md: -------------------------------------------------------------------------------- 1 | - [Data Flow Analysis - Foundations I](#head1) 2 | - [Iterative Algorithm, Another View](#head2) 3 | - [Partial Order](#head3) 4 | - [ 偏序](#head4) 5 | - [Upper and Lower Bounds](#head5) 6 | - [ 定义](#head6) 7 | - [ poset性质](#head7) 8 | - [Lattice, Semilattce,Complete and Product Lattice](#head8) 9 | - [ Lattice](#head9) 10 | - [Complete Lattice](#head10) 11 | - [Product Lattice](#head11) 12 | - [Data Flow Analysis Framework Via Lattic](#head12) 13 | - [Monotonicity and Fixed Point Theorem](#head13) 14 | - [ 定义](#head14) 15 | - [证明-Existence of fixed point](#head15) 16 | - [证明-The fixed point is the least](#head16) 17 | - [lattice 上数学运算与data analyse ](#head17) 18 | 19 | # Data Flow Analysis - Foundations I 20 | 21 | ## Iterative Algorithm, Another View 22 | 23 | 24 | 25 | k-tuple抽象成每次迭代的输入输出 26 | 27 | 28 | 29 | 30 | 31 | 三个问题: 32 | - 算法迭代是否能停止,是否能有一个解 33 | - 如果是,是否是唯一解,唯一不动点,是否是最好的 34 | - 算法什么时候到达不动点,什么时候我们能得到一个解 35 | 36 | 37 | ## Partial Order 38 | 39 | ### 偏序 40 | 41 | 42 | 43 | 44 | 偏序关系意义,在集合中的任意一部分不一定需要满足偏序关系,如pin,sin之间并没有偏序关系 45 | 46 | ## Upper and Lower Bounds 47 | 48 | ### 定义 49 | 50 | 51 | 52 | upper bound不一定是subset S中,也可能是P中的。 53 | 54 | ### poset性质 55 | 56 | 57 | 58 | 59 | 60 | ## Lattice, Semilattce,Complete and Product Lattice 61 | ### Lattice 62 | 63 | 64 | 拓展:半格 65 | 66 | 67 | - 对于只有join存在, ∪ ,join semilattice 68 | - 对于只有meet存在,∩ , meet semilattice 69 | 70 | ### Complete Lattice 71 | 72 | 73 | - lattice 是任意两个元素,complate lattice是任意subset 74 | 75 | - complete lattice 不一定是finite lattice,比如0-1的之间的实数,存在bound,但是不是finite 76 | 77 | ### Product Lattice 78 | 79 | 80 | 81 | 对应迭代算法里的k-tuple 82 | 83 | ## Data Flow Analysis Framework Via Lattic 84 | 85 | 86 | 87 | ## Monotonicity and Fixed Point Theorem 88 | 89 | ### 定义 90 | 91 | 92 | 93 | ### 证明-Existence of fixed point 94 | 95 | 96 | 97 | 因为是product lattice,所以有last upper bound或greatest lower bound,所以当单调递增到f(last upper bound)时,就会达到fix point。 98 | 99 | ### 证明-The fixed point is the least 100 | 101 | 102 | ### lattice 上数学运算与data analyse 103 | -------------------------------------------------------------------------------- /06.Data-Flow-Analysis-Foundations-II.md: -------------------------------------------------------------------------------- 1 | - [Data Flow Analysis Foundations II](#head1) 2 | - [Relate Iterative Algorithm to Fixed Point Theorem](#head2) 3 | - [ 格与迭代算法对应](#head3) 4 | - [ 证明迭代算法中F的monotonic](#head4) 5 | - [ 什么时候到达fixed-point](#head5) 6 | - [May/Must Analysis, A Lattice View](#head6) 7 | - [Mop and Distributivity](#head7) 8 | - [ mop定义](#head8) 9 | - [ mop与迭代算法区别](#head9) 10 | - [Constant Propagation](#head10) 11 | - [非distributive的问题,must analysis](#head11) 12 | - [ 问题映射到lattice上](#head12) 13 | - [Worklist Algorithm](#head13) 14 | # Data Flow Analysis Foundations II 15 | 16 | ## Relate Iterative Algorithm to Fixed Point Theorem 17 | 18 | ### 格与迭代算法对应 19 | 20 | 21 | 22 | 对应关系主要关注,对应fixed-point theorem: 23 | - finite lattice( complete lattice) 24 | - monotonic 25 | 26 | 迭代算法的抽象: 27 | - 由k个cfg中node对应的k-tuple生成格 28 | - 对于迭代的F,分为 29 | - transfer function 30 | - control flow上的 merge操作 31 | 32 | ### 证明迭代算法中F的monotonic 33 | 34 | 35 | - gen/kill fun是monotonic 36 | 37 | - merge 的join是monotonic。(meet没证明) 38 | 39 | ### 什么时候到达fixed-point 40 | 41 | 42 | 43 | 每一个node上的格,最多是该格的高度h。再加上k-tuple的k。生成格上为h*k 44 | 45 | ## May/Must Analysis, A Lattice View 46 | 47 | 48 | 49 | 通过Reaching Definition来理解may analysis,may analysis从bottom到top,对应从unsafe result到safe result,对与Reaching Definition来说unsafe result就是 no definitons can reach,这样的开始对于应用来说是不安全的(没有任何一个definitions可达,导致所有的变量都被提前释放)。然后向safe result(所有的都不释放),approximate。 50 | 51 | 52 | 53 | safe的范围,也就是sound的范围。 54 | 55 | 56 | 57 | 用于理解may/must在格上 58 | 59 | ## Mop and Distributivity 60 | 61 | ### mop定义 62 | 63 | 64 | 65 | 66 | 67 | ### mop与迭代算法区别 68 | 69 | 70 | - 迭代算法精度小于mop 71 | - F为可分配,则精度相同 72 | - Bit-vector or Gen/Kill problems(set union/intersection for join/meet) are distributive 73 | 74 | ## Constant Propagation 75 | 76 | ### 非distributive的问题,must analysis 77 | 78 | ### 问题映射到lattice上 79 | 80 | 81 | 82 | 问题(围绕怎么把这个问题映射到lattice上的数学问题,且需要脱离之前讲的bit vector上与该问题的迁移的思想): 83 | 84 | - finite lattice 85 | - UNDEF -∞ ... -1 0 1 ... +∞,这个是finite的吗?还是lattice的高度是finite的就可以? 86 | - monotonic 87 | - transfer func、merge是单调的吗? 88 | 89 | - UNDEF ∩ v = v 怎么理解? 90 | - node上的vector数据结构表示,可以是{{V1:Z1},{V2:Z2},....{Vn:Zn}},z ∈ { -∞ ... -1 0 1 ... +∞}吗? 91 | 92 | 93 | 94 | - 不可分配 95 | - mop更准 96 | 97 | ## Worklist Algorithm 98 | 99 | 100 | 101 | 优化掉迭代算法中没有input变化的BB -------------------------------------------------------------------------------- /07.Interprocedural-Analysis.md: -------------------------------------------------------------------------------- 1 | - [Interprocedural Analysis](#head1) 2 | - [ Motivation](#head2) 3 | - [Call Graph](#head3) 4 | - [Call Graph Construction(CHA)](#head4) 5 | - [Call Graph算法对比](#head5) 6 | - [ Dispatch](#head6) 7 | - [Java中的method invoke](#head7) 8 | - [method signature](#head8) 9 | - [virtual call dispatch](#head9) 10 | - [ CHA](#head10) 11 | - [ 定义](#head11) 12 | - [ Resolve](#head12) 13 | - [ 全程序算法](#head13) 14 | - [Interprocedural Control-Flow Graph](#head14) 15 | - [ 定义](#head15) 16 | - [Interprocedural Data-Flow Analysis](#head16) 17 | - [ 过程间分析组成](#head17) 18 | - [Interprocedural Constant Propagation](#head18) 19 | - [ 组成](#head19) 20 | - [ 栗子](#head20) 21 | # Interprocedural Analysis 22 | 23 | ## Motivation 24 | 25 | ### Call Graph 26 | 27 | 28 | 29 | 为了表达过程间分析,我们需要call graph 30 | 31 | ## Call Graph Construction(CHA) 32 | 33 | ### Call Graph算法对比 34 | 35 | 36 | ### Dispatch 37 | 38 | #### Java中的method invoke 39 | 40 | 41 | #### method signature 42 | 43 | 44 | #### virtual call dispatch 45 | 46 | 47 | ### CHA 48 | 49 | #### 定义 50 | 51 | 52 | #### Resolve 53 | 54 | 55 | 问题: 56 | - 对于special call,private instance method和constructor直接找到当前类的调用, superclass instance method 直接可以通过dispatch 当前类父。不太清楚为什么constructor是直接在当前类中调用的,应该是涉及到java构造函数的底层原理。 57 | - 对于virtual call是dispatch当前receiver类型及其后代类。 58 | ``` 59 | 这部分如何去思考? 60 | C c = new XX() 61 | c可能是哪些类? 62 | (1)xx可能是c 63 | 1)m可能在当前类C中 64 | 2)m可能在当前类C的父类中 65 | (2)xx可能是c的子类 66 | 1)可能在子类X中 67 | 2)可能在子类X的父类中。 68 | 因为不考虑receiver接收的具体类,所以要考虑receiver的类,及其所有子类。 69 | ``` 70 | 71 | #### 全程序算法 72 | 73 | 74 | ## Interprocedural Control-Flow Graph 75 | 76 | ### 定义 77 | 78 | 79 | 80 | ## Interprocedural Data-Flow Analysis 81 | ### 过程间分析组成 82 | 83 | 84 | ### Interprocedural Constant Propagation 85 | #### 组成 86 | 87 | 88 | #### 栗子 89 | 90 | 问题: 91 | 92 | - 为什保留call set到下条语句的边 93 | - 是因为这条边用于传播当前函数的常量,免去当前函数中的local var 也通过control flow传递到不必要的函数调用中 94 | - 为什么先要kill掉函数调用的左值 95 | - 如栗子中b = ten(),如果调用位置通过向下的边传递了b = 7,则与ten函数返回结果进行merge,变成了NAC,错误结果。 96 | -------------------------------------------------------------------------------- /08.Pointer-Analysis.md: -------------------------------------------------------------------------------- 1 | - [Pointer Analysis](#head1) 2 | - [ Motivation](#head2) 3 | - [Introduction to Pointer Analysis](#head3) 4 | - [Pointer Analysis 简述](#head4) 5 | - [Pointer Analysis 和 Alias Analysis 的区别](#head5) 6 | - [ 指针分析在静态分析地位](#head6) 7 | - [Key Factors of Pointer Analysis](#head7) 8 | - [Pointer Analysis的四个取舍要素](#head8) 9 | - [Heap Abstraction](#head9) 10 | - [ 为什么堆抽象](#head10) 11 | - [Allocation-Site Abstraction](#head11) 12 | - [Context Sensitivity](#head12) 13 | - [Flow Sensitivity](#head13) 14 | - [Analysis Scope](#head14) 15 | - [ 课程涉及的特性](#head15) 16 | - [Concerned Statements](#head16) 17 | - [Pointer Analysis面向的指针类型](#head17) 18 | - [ Pointer Analysis面向的语句](#head18) 19 | # Pointer Analysis 20 | 21 | ## Motivation 22 | 23 | 24 | 25 | 指针分析可以解决之前通过CHA导致的过多误报问题,因为我们可以通过指针分析的值n真正指向的对象。 26 | 27 | ## Introduction to Pointer Analysis 28 | 29 | ### Pointer Analysis 简述 30 | 31 | 32 | ### Pointer Analysis 和 Alias Analysis 的区别 33 | 34 | 两者可以理解为两个域之间的映射关系,分为两个域:指针域、对象域。 35 | 36 | - Pointer Analysis问题为指针域指向对象域的问题,同一个指针指向了哪些对象。 37 | - Alias Analysis问题是对象域指向指针域的问题,同一个对象指向了哪些指针。 38 | 39 | ### 指针分析在静态分析地位 40 | Pointer analysis is one of the most fundamenal static program analyses, on which virtually others are built. 41 | 42 | ## Key Factors of Pointer Analysis 43 | ### Pointer Analysis的四个取舍要素 44 | 45 | 46 | ### Heap Abstraction 47 | #### 为什么堆抽象 48 | 49 | 50 | #### Allocation-Site Abstraction 51 | 52 | 53 | ### Context Sensitivity 54 | 55 | 56 | ### Flow Sensitivity 57 | 58 | 59 | ### Analysis Scope 60 | 61 | 62 | ### 课程涉及的特性 63 | 64 | 从这里可以大概感觉到对于多数静态分析,更贴近于工程中的问题,对于实现中的细节,没有一个完美统一的解决方案,都是在于各个要素的取舍 65 | 66 | ## Concerned Statements 67 | 68 | ### Pointer Analysis面向的指针类型 69 | 70 | 对于array我们直接抽象成Instance field,不区分index 71 | 72 | ### Pointer Analysis面向的语句 73 | 74 | 我们学习的时候,主要学习virtual call的分析,static call、special call比较简单。 -------------------------------------------------------------------------------- /09.Pointer-Analysis-Foundations-I.md: -------------------------------------------------------------------------------- 1 | - [Pointer Analysis - Foundations I](#head1) 2 | - [Pointer Analysis:Rules](#head2) 3 | - [ 影响指针的statements](#head3) 4 | - [Domains and Notations](#head4) 5 | - [ Rule](#head5) 6 | - [How to implement Pointer Analysis](#head6) 7 | - [ PFG](#head7) 8 | - [实现Pointer Analysis](#head8) 9 | - [Pointer Analysis:Algorithms](#head9) 10 | # Pointer Analysis - Foundations I 11 | 12 | ## Pointer Analysis:Rules 13 | 14 | ### 影响指针的statements 15 | 16 | 17 | ### Domains and Notations 18 | 19 | 20 | powerset of O,就是所有对象的所有子集组成的集合 21 | 22 | ### Rule 23 | 24 | 25 | 26 | 27 | ## How to implement Pointer Analysis 28 | 29 | ### PFG 30 | 31 | 32 | ### 实现Pointer Analysis 33 | 34 | 35 | ## Pointer Analysis:Algorithms 36 | 37 | 38 | -------------------------------------------------------------------------------- /10.Pointer-Analysis-Foundations-II.md: -------------------------------------------------------------------------------- 1 | - [Pointer Analysis with Method Calls](#head1) 2 | - [call rule](#head2) 3 | - [ 不加x到this](#head3) 4 | - [Interprocedure Pointer Anaylsis Algorithm](#head4) 5 | # Pointer Analysis with Method Calls 6 | 7 | ## call rule 8 | 9 | 10 | ## 不加x到this 11 | 12 | 13 | ## Interprocedure Pointer Anaylsis Algorithm 14 | ``` 15 | AddEdge(s,t) 16 | if s-> t ∉ PFG then 17 | add s->t to PFG 18 | if pt(s) is not empty then 19 | add to WL 20 | ``` 21 | 22 | -------------------------------------------------------------------------------- /11.Pointer-Analysis-Context-Sensitivity-I.md: -------------------------------------------------------------------------------- 1 | - [Pointer Analysis Context Sensitivity](#head1) 2 | - [ Introduction](#head2) 3 | - [Why Context Sensitivity](#head3) 4 | - [Cloning-Based Context Sensitivity](#head4) 5 | - [Why Context-Sensitive Heap](#head5) 6 | - [Context-Sensitive Heap](#head6) 7 | - [Context Sensitive Pointer Analysis:Rules](#head7) 8 | - [Domains and Notations](#head8) 9 | - [ Rules](#head9) 10 | # Pointer Analysis Context Sensitivity 11 | 12 | ## Introduction 13 | 14 | ### Why Context Sensitivity 15 | 16 | 17 | 18 | ### Cloning-Based Context Sensitivity 19 | 20 | 21 | ### Why Context-Sensitive Heap 22 | 23 | 24 | ### Context-Sensitive Heap 25 | 26 | 27 | ## Context Sensitive Pointer Analysis:Rules 28 | 29 | ### Domains and Notations 30 | 31 | 32 | ## Rules 33 | 34 | -------------------------------------------------------------------------------- /12.Pointer-Analysis-Context-Sensitivity-II.md: -------------------------------------------------------------------------------- 1 | - [Pointer Analysis Context Sensitivity II](#head1) 2 | - [Context Sensitive Pointer Analysis : Algorithms](#head2) 3 | - [ 定义](#head3) 4 | - [ algorithms](#head4) 5 | - [Context Sensitivity Variants](#head5) 6 | - [Call-Site Sensitivity](#head6) 7 | - [ 栗子](#head7) 8 | - [Object Sensitivity](#head8) 9 | - [ 栗子](#head9) 10 | - [Type Sensitivity](#head10) 11 | - [ 对比](#head11) 12 | 13 | # Pointer Analysis Context Sensitivity II 14 | 15 | ## Context Sensitive Pointer Analysis : Algorithms 16 | 17 | ### 定义 18 | 19 | 20 | ### algorithms 21 | 22 | 23 | ``` 24 | AddEdge(s,t) 25 | if s -> t ∉ PFG then 26 | add s -> t to PFG 27 | if pt(s) is not empty then 28 | add to WL 29 | Propagate(n,pts) 30 | if pts is not empty then 31 | pt(n) ∪= pts 32 | foreach n->s ∈ PFG do 33 | add to WL 34 | ``` 35 | 36 | 37 | 38 | ## Context Sensitivity Variants 39 | 40 | 41 | 42 | ``` 43 | context insensitivity可以看作是context sensitivity的特殊情况: 44 | Select(c,l,c':oi,m) = [], 即所有的上下文都相等 45 | ``` 46 | 47 | ### Call-Site Sensitivity 48 | 49 | 50 | 对于Call-Site Sensitivity来说,如果存在递归,会导致上下文无穷长,无穷多,所以要限制上下文长度。 51 | 52 | #### 栗子 53 | 54 | 55 | 56 | 从这个栗子里面,可以思考到一些点,其实context的有与无,其实就是该函数调用,被抽象成了相同的path还是不同的path。就是一个把path数据合并与分开的操作。 57 | 再比如对于for循环,每一次迭代,都可以分成不同的path,但是我们仍然可以选择合并、或是分开。 58 | 合并意味着牺牲精度,来满足速度,或是抽象无穷多的path来达到可以完成计算。 59 | 60 | ### Object Sensitivity 61 | 62 | 63 | #### 栗子 64 | 65 | 66 | 对于这个栗子,1 call-site context没办法区分两个调用 67 | 68 | 69 | 70 | 从CG上来看 71 | 72 | 73 | 74 | 对与这个栗子,1 object sensitivity不能区分 75 | 76 | ### Type Sensitivity 77 | 78 | 79 | 对于与Object Sensitivity,性价比较高 80 | 81 | ### 对比 82 | 83 | call-graph-edge越少,表示越精确(误报的边少)。 84 | may-fail-cast越高,精度越低。 85 | 有些调用并不需要cs,可以ci既能满足需求,具体读老师论文 -------------------------------------------------------------------------------- /13.Static-Analysis-For-Security.md: -------------------------------------------------------------------------------- 1 | - [Static Analysis for Security](#head1) 2 | - [Information Flow Security](#head2) 3 | - [Access Control vs. Information Flow Security](#head3) 4 | - [Security Levels](#head4) 5 | - [Information Flow Policy](#head5) 6 | - [Confidentiality and Integrity](#head6) 7 | - [Confidentiality vs. Integrity](#head7) 8 | - [Integrity, Broad Definition](#head8) 9 | - [Explicit Flows and Covert Channels](#head9) 10 | - [Implicit Flow](#head10) 11 | - [Covert Channels](#head11) 12 | - [Taint Analysis](#head12) 13 | - [ 定义](#head13) 14 | - [ 解决confidentiality、Integrity](#head14) 15 | - [Taint 与Pointer Analysis结合](#head15) 16 | - [Domains and Notations](#head16) 17 | - [Taint Analysis Input & Output](#head17) 18 | - [Taint analysis:rule](#head18) 19 | - [ 其他](#head19) 20 | # Static Analysis for Security 21 | 22 | ## Information Flow Security 23 | 24 | ### Access Control vs. Information Flow Security 25 | 26 | 通过两个行为,控制程序的安全性:对数据标记访问控制等级、通过信息流控制信息流动。点与端到端的控制。 27 | 28 | ### Security Levels 29 | 30 | 可以通过格来描述安全等级之间的关系 31 | 32 | ### Information Flow Policy 33 | 34 | 35 | ## Confidentiality and Integrity 36 | 37 | ### Confidentiality vs. Integrity 38 | 39 | confidentiality,防止h数据流向l,防止h数据被窥。Integrity,防止l数据流向h数据,h数据被污染。 40 | 41 | 两者在格上的关系是对称的。 42 | 43 | ### Integrity, Broad Definition 44 | 45 | 46 | ## Explicit Flows and Covert Channels 47 | 48 | ### Implicit Flow 49 | 50 | 51 | ### Covert Channels 52 | 53 | 54 | Blind Time Base SQLI 55 | 56 | ## Taint Analysis 57 | 58 | ### 定义 59 | 60 | 61 | ### 解决confidentiality、Integrity 62 | 63 | 64 | ### Taint 与Pointer Analysis结合 65 | 66 | 67 | ### Domains and Notations 68 | 69 | 对于普通的对象oi集合,添加了一种taint类型的对象,在指针间传播。 70 | 71 | ### Taint Analysis Input & Output 72 | 73 | 74 | ### Taint analysis:rule 75 | 76 | 确认sources和sink的两种rule,可以看出对于taint的对象,就是一种特殊的指针传播。 77 | 对于一些string的加法,concat的函数。可以直接定义一些污点传播规则,套入指针分析。 78 | 79 | ## 其他 80 | doop static ananlysis -------------------------------------------------------------------------------- /14.Datalog-Based-Program-Analysis.md: -------------------------------------------------------------------------------- 1 | - [Datalog-Based Program Analysis](#head1) 2 | - [ Motivation](#head2) 3 | - [命令式 vs 声明示](#head3) 4 | - [Introduction to Datalog](#head4) 5 | - [Datalog 的 data](#head5) 6 | - [predicates ](#head6) 7 | - [ 通过Atoms表示predicates](#head7) 8 | - [Datalog 的 rule](#head8) 9 | - [EDB and IDB](#head9) 10 | - [ Logical](#head10) 11 | - [Logical Or](#head11) 12 | - [ Negation](#head12) 13 | - [ Recursion](#head13) 14 | - [Rule safety](#head14) 15 | - [Excution of Datalog Programs](#head15) 16 | - [Pointer Analysis via Datalog](#head16) 17 | - [EDB/IDB Model](#head17) 18 | - [Rule TO Datalog](#head18) 19 | - [Example without method call](#head19) 20 | - [Taint Analysis via Datalog](#head20) 21 | - [Datalog Pros vs Cons](#head21) 22 | # Datalog-Based Program Analysis 23 | 24 | ## Motivation 25 | 26 | ### 命令式 vs 声明示 27 | 28 | Declarative的特征: 29 | - Succint 30 | - Readable(logic-based specification) 31 | - Easy to implement 32 | 33 | ## Introduction to Datalog 34 | 35 | Datalog is a declarative logic programming language that is a subset of Prolog 36 | - No side-effects : 比如,不会有赋值操作,不能改变值,进而不会导致的副作用。 37 | 38 | ### Datalog 的 data 39 | #### predicates 40 | 41 | 42 | #### 通过Atoms表示predicates 43 | 44 | Atoms分类: 45 | - relational atom : P(X1,X2,X3),如Age("Alan",23) 46 | - arithmetic atoms : 如 age >= 18 47 | 48 | ### Datalog 的 rule 49 | 50 | H <- B1,B2,B3 51 | 52 | Datalog program = Facts + Rules 53 | 54 | ### EDB and IDB 55 | 56 | H头部,只能是IDB,不能是推出来的。 57 | 58 | ### Logical 59 | #### Logical Or 60 | 61 | 62 | #### Negation 63 | 64 | 65 | ### Recursion 66 | 67 | 可以递归定义 68 | 69 | 70 | ### Rule safety 71 | 72 | 对于一个变量,必须出现在一个非negated relational atom中。如果值出现在一个negated relations中,则表示不满足该relations,则是无穷多。如果值出现在一个negated arithmetic atoms中,同理无穷多。 73 | 74 | ### Excution of Datalog Programs 75 | 76 | 77 | 78 | ## Pointer Analysis via Datalog 79 | 80 | 81 | ### EDB/IDB Model 82 | 83 | 84 | ### Rule TO Datalog 85 | 86 | 87 | 88 | 89 | ### Example without method call 90 | 91 | 92 | ## Taint Analysis via Datalog 93 | 94 | 95 | 96 | ## Datalog Pros vs Cons 97 | -------------------------------------------------------------------------------- /15.IFDS.md: -------------------------------------------------------------------------------- 1 | - [IFDS & CFL](#head1) 2 | - [Feasible and Realizable Paths](#head2) 3 | - [ CFL-Reachability](#head3) 4 | - [Overview of IFDS](#head4) 5 | - [MOP & MRP](#head5) 6 | - [ overview](#head6) 7 | - [Supergraph and Flow Funcations](#head7) 8 | - [ supergraph](#head8) 9 | - [flow functions](#head9) 10 | - [Exploded Supergraph and Tabulation Algorithm](#head10) 11 | - [exploded supegraph](#head11) 12 | - [0 -> 0](#head12) 13 | - [exploded supegraph example](#head13) 14 | - [tabulation algorithm](#head14) 15 | - [Understanding the Distributivity of IFDS](#head15) 16 | - [Can we do constant propagation using IFDS](#head16) 17 | - [Can we do pointer analysis useing IFDS](#head17) 18 | - [ 待解决问题](#head18) 19 | # IFDS & CFL 20 | 21 | 22 | ## Feasible and Realizable Paths 23 | 24 | Infeasible Path : Paths in CFG that do not correspond to actual executions. 25 | 比如上图中Call foo(30)对应的Return 到 Call foo(18)处。(非上下问敏感) 26 | 27 | ## CFL-Reachability 28 | 29 | 通过 context-free language来描述可执行的路径。 30 | 31 | 通过(i、)i,表示调用以及返回,来描述调用和返回,)i必须有(i对应,组成合法的label。感觉这个就是(i、)i,描述调用关系,其实也类似于一种上下文。 32 | 33 | ## Overview of IFDS 34 | 35 | - 过程间 36 | - 域有限 37 | - 可分配 38 | - 子集问题 39 | ### MOP & MRP 40 | 41 | 相对于 MOP,MRP是realizable-path 42 | ### overview 43 | 44 | program P,problem Q -> supergraph G* -> exploded supergraph G# -> reachability problems 45 | 46 | ## Supergraph and Flow Funcations 47 | 48 | ### supergraph 49 | 50 | 51 | ### flow functions 52 | 53 | - main函数中的,Callp -> Retp,为什么需要 lambda S.S-{g} ? 因为g是全局变量,会跟随p的调用,进入p,并在Retp处返回。如果不去掉,在Retp处,会导致误报。 54 | - 一开始,我理解Sp的调用为引用传递,然后我考虑函数p的参数x/a,需要在Callp -> Retp处去掉x。该处为值传递,所以不需要去掉。所以java这处只考虑值传递,是因为java只有值传递吗? 55 | - a = a - g 中,transfer func 是 lambda S.if (a∈S) or (g ∈ S) than S ∪ {a} else S - {a},其实从从这个函数可以看出,是distribute的,我只需要a或g中的一个fact,即可决定输出。 56 | 57 | ## Exploded Supergraph and Tabulation Algorithm 58 | 59 | ### exploded supegraph 60 | 61 | 62 | ### 0 -> 0 63 | 64 | 65 | ### exploded supegraph example 66 | 67 | 68 | ### tabulation algorithm 69 | 70 | 71 | 72 | 73 | ## Understanding the Distributivity of IFDS 74 | 75 | ### Can we do constant propagation using IFDS 76 | 77 | 如果我们把constant propagation的域假设为finite,我们仍然不能用IFDS,因为无法解决tranfer func单输入的问题(distribute)。 78 | 79 | ### Can we do pointer analysis useing IFDS 80 | 81 | 上图求解的问题,是new T 对象,能到达哪些变量。对于上面的传播,缺少alias信息,使结果不sound了,而alias是多输入的函数,所以满足IFDS的distributivtiy。 82 | 83 | ## 待解决问题 84 | - 找上面实际例子,结合transfer func来理解一下传递的意义,transfer func怎么转换成的representation relations.这些点与点之间的关系的意义 85 | - 对于transfer func转换的规则: f(空集)= {y},为什么y就不能出现在其他的被指向的点上了? 86 | - 仔细研究一下tabulation algorithm细节 -------------------------------------------------------------------------------- /16.Soundiness.md: -------------------------------------------------------------------------------- 1 | - [ Soundiness](#head1) 2 | - [Soundness and Soundiness](#head2) 3 | - [ Soundness](#head3) 4 | - [常见Hardness Feature](#head4) 5 | - [ 提出Soundiness](#head5) 6 | - [ Soundness,soundiness,Unsoundness](#head6) 7 | - [Hard Language Feature : Java Reflection](#head7) 8 | - [ 反射难论文](#head8) 9 | - [ 解决反射](#head9) 10 | - [String Constant analysis](#head10) 11 | - [ 通过调用处的信息查找](#head11) 12 | - [Assisted By Dynamic Analysis](#head12) 13 | - [Hard Language Feature : Native Code](#head13) 14 | - [Native code 原理](#head14) 15 | - [ 解决方案](#head15) 16 | # Soundiness 17 | 18 | ## Soundness and Soundiness 19 | 20 | ### Soundness 21 | 22 | 不论学术界、工业界都没有达到一个真正的soundness,因为Hard Language Feature 23 | ### 常见Hardness Feature 24 | 25 | 26 | ### 提出Soundiness 27 | 28 | 29 | ### Soundness,soundiness,Unsoundness 30 | 31 | 32 | - sound 完全捕获所有的动态行为 33 | - soundy 捕获所有的动态行为,为unsoundly 的处理给予原因或解决策略 34 | - unsound 忽略动态特性 35 | 36 | ## Hard Language Feature : Java Reflection 37 | 38 | ### 反射难论文 39 | 40 | 反射存在的意义:Run-time特性,在spring等框架中,用于解耦 41 | 42 | ### 解决反射 43 | #### String Constant analysis 44 | 45 | 如果存在反射代码中,如果反射中的参数都是字符串,则可以通过字符串,根据程序语义来确定,反射的具体是哪些类、方法、field等。但是实际应用中,这种参数可能存在于任何不可确定的输入中。 46 | 47 | #### 通过调用处的信息查找 48 | 49 | When string arguments cannot be resolved statically, infer the reflective targes at their usage points. 50 | 51 | 通过parameters参数指针,所指向的所有对象的类型,去推断有这样参数特征的函数 52 | 53 | #### Assisted By Dynamic Analysis 54 | 55 | 最后一个,通过运行test case,来做到运行中分析。dynamic analysis的缺点:不soundiness,有多少test case,有多少覆盖。 56 | 57 | ## Hard Language Feature : Native Code 58 | 59 | ### Native code 原理 60 | 61 | 62 | 63 | 通过java代码调用本地连接库,c可调用Java的一些逻辑。 64 | 65 | ### 解决方案 66 | 67 | 通过java代码实现native功能。 -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # NJU-static-program-analysis-node 2 | 3 | 快速的过了一遍课程视频,大体了解了一下,打算看第二遍,并记下笔记。🙏感谢南大两位老师 4 | 5 | [课程地址](https://pascal-group.bitbucket.io/teaching.html) 6 | # 我的一些思考 7 | [thinking.md](./thinking.md) 8 | 9 | # 笔记目录 10 | 11 | [01.Course Introduction](./001.Course-Introduction.md) 12 | 13 | - [Course Introduction](./01.Course-Introduction.md#head1) 14 | - [PL and Static Analysis](./01.Course-Introduction.md#head2) 15 | - [Why We Lean Static Analysis](./01.Course-Introduction.md#head3) 16 | - [What is Static Analysis](./01.Course-Introduction.md#head4) 17 | - [Static Analysis Features and Examples](./01.Course-Introduction.md#head5) 18 | - [ soundness](./01.Course-Introduction.md#head6) 19 | - [ 如何实现](./01.Course-Introduction.md#head7) 20 | - [ 一个栗子](./01.Course-Introduction.md#head8) 21 | - [ 精度与速度平衡](./01.Course-Introduction.md#head9) 22 | - [Teaching Plan](./01.Course-Introduction.md#head10) 23 | - [Evalution Criteria](./01.Course-Introduction.md#head11) 24 | 25 | 26 | [02.Intermediate-Representation.md](./02.Intermediate-Representation.md) 27 | 28 | - [Intermediate Representation](./02.Intermediate-Representation.md#head1) 29 | - [Compilers and Static Analyzers](./02.Intermediate-Representation.md#head2) 30 | - [AST vs. IR](./02.Intermediate-Representation.md#head3) 31 | - [IR: Three-Address Code (3AC)](./02.Intermediate-Representation.md#head4) 32 | - [3AC in Real Static Analyzer : Soot](./02.Intermediate-Representation.md#head5) 33 | - [Static Single Assignment (SSA)](./02.Intermediate-Representation.md#head6) 34 | - [Basic Blocks (BB)](./02.Intermediate-Representation.md#head7) 35 | - [Control Flow Graphs (CFG)](./02.Intermediate-Representation.md#head8) 36 | 37 | [03.Data-Flow-Analysis-I.md](./03.Data-Flow-Analysis-I.md) 38 | 39 | - [Data Flow Analysis I](./03.Data-Flow-Analysis-I.md#head1) 40 | - [Overview of Data Flow Analysis](./03.Data-Flow-Analysis-I.md#head2) 41 | - [Preliminaries of Data Flow Analysis](./03.Data-Flow-Analysis-I.md#head3) 42 | - [Reaching Definitions Analysis](./03.Data-Flow-Analysis-I.md#head4) 43 | - [Reaching Definitions的定义](./03.Data-Flow-Analysis-I.md#head5) 44 | - [用bit vectors去表示是否可达](./03.Data-Flow-Analysis-I.md#head6) 45 | - [Transfer function and Control flow](./03.Data-Flow-Analysis-I.md#head7) 46 | - [ 算法](./03.Data-Flow-Analysis-I.md#head8) 47 | - [ 栗子](./03.Data-Flow-Analysis-I.md#head9) 48 | - [ 为什么会最终不变](./03.Data-Flow-Analysis-I.md#head10) 49 | 50 | [04.Data-Flow-Analysis-II.md](./04.Data-Flow-Analysis-II.md) 51 | 52 | - [Data Flow Analysis II](./04.Data-Flow-Analysis-II.md#head1) 53 | - [Live Variables Analysis](./04.Data-Flow-Analysis-II.md#head2) 54 | - [ 定义](./04.Data-Flow-Analysis-II.md#head3) 55 | - [transfer func and control flow merge](./04.Data-Flow-Analysis-II.md#head4) 56 | - [ 算法](./04.Data-Flow-Analysis-II.md#head5) 57 | - [ 栗子](./04.Data-Flow-Analysis-II.md#head6) 58 | - [Available Expressons Analysis](./04.Data-Flow-Analysis-II.md#head7) 59 | - [ 定义](./04.Data-Flow-Analysis-II.md#head8) 60 | - [transfer func and control flow merge](./04.Data-Flow-Analysis-II.md#head9) 61 | - [ 算法](./04.Data-Flow-Analysis-II.md#head10) 62 | - [ 三种算法对比](./04.Data-Flow-Analysis-II.md#head11) 63 | 64 | [05.Data-Flow-Analysis-Foundations-I.md](./05.Data-Flow-Analysis-Foundations-I.md) 65 | 66 | - [Data Flow Analysis - Foundations I](./05.Data-Flow-Analysis-Foundations-I.md#head1) 67 | - [Iterative Algorithm, Another View](./05.Data-Flow-Analysis-Foundations-I.md#head2) 68 | - [Partial Order](./05.Data-Flow-Analysis-Foundations-I.md#head3) 69 | - [ 偏序](./05.Data-Flow-Analysis-Foundations-I.md#head4) 70 | - [Upper and Lower Bounds](./05.Data-Flow-Analysis-Foundations-I.md#head5) 71 | - [ 定义](./05.Data-Flow-Analysis-Foundations-I.md#head6) 72 | - [ poset性质](./05.Data-Flow-Analysis-Foundations-I.md#head7) 73 | - [Lattice, Semilattce,Complete and Product Lattice](./05.Data-Flow-Analysis-Foundations-I.md#head8) 74 | - [ Lattice](./05.Data-Flow-Analysis-Foundations-I.md#head9) 75 | - [Complete Lattice](./05.Data-Flow-Analysis-Foundations-I.md#head10) 76 | - [Product Lattice](./05.Data-Flow-Analysis-Foundations-I.md#head11) 77 | - [Data Flow Analysis Framework Via Lattic](./05.Data-Flow-Analysis-Foundations-I.md#head12) 78 | - [Monotonicity and Fixed Point Theorem](./05.Data-Flow-Analysis-Foundations-I.md#head13) 79 | - [ 定义](./05.Data-Flow-Analysis-Foundations-I.md#head14) 80 | - [证明-Existence of fixed point](./05.Data-Flow-Analysis-Foundations-I.md#head15) 81 | - [证明-The fixed point is the least](./05.Data-Flow-Analysis-Foundations-I.md#head16) 82 | - [lattice 上数学运算与data analyse ](./05.Data-Flow-Analysis-Foundations-I.md#head17) 83 | 84 | [06.Data-Flow-Analysis-Foundations-II.md](./06.Data-Flow-Analysis-Foundations-II.md) 85 | 86 | - [Data Flow Analysis Foundations II](./06.Data-Flow-Analysis-Foundations-II.md#head1) 87 | - [Relate Iterative Algorithm to Fixed Point Theorem](./06.Data-Flow-Analysis-Foundations-II.md#head2) 88 | - [ 格与迭代算法对应](./06.Data-Flow-Analysis-Foundations-II.md#head3) 89 | - [ 证明迭代算法中F的monotonic](./06.Data-Flow-Analysis-Foundations-II.md#head4) 90 | - [ 什么时候到达fixed-point](./06.Data-Flow-Analysis-Foundations-II.md#head5) 91 | - [May/Must Analysis, A Lattice View](./06.Data-Flow-Analysis-Foundations-II.md#head6) 92 | - [Mop and Distributivity](./06.Data-Flow-Analysis-Foundations-II.md#head7) 93 | - [ mop定义](./06.Data-Flow-Analysis-Foundations-II.md#head8) 94 | - [ mop与迭代算法区别](./06.Data-Flow-Analysis-Foundations-II.md#head9) 95 | - [Constant Propagation](./06.Data-Flow-Analysis-Foundations-II.md#head10) 96 | - [非distributive的问题,must analysis](./06.Data-Flow-Analysis-Foundations-II.md#head11) 97 | - [ 问题映射到lattice上](./06.Data-Flow-Analysis-Foundations-II.md#head12) 98 | - [Worklist Algorithm](./06.Data-Flow-Analysis-Foundations-II.md#head13) 99 | 100 | [07.Interprocedural-Analysis.md](./07.Interprocedural-Analysis.md) 101 | 102 | - [Interprocedural Analysis](./07.Interprocedural-Analysis.md#head1) 103 | - [ Motivation](./07.Interprocedural-Analysis.md#head2) 104 | - [Call Graph](./07.Interprocedural-Analysis.md#head3) 105 | - [Call Graph Construction(CHA)](./07.Interprocedural-Analysis.md#head4) 106 | - [Call Graph算法对比](./07.Interprocedural-Analysis.md#head5) 107 | - [ Dispatch](./07.Interprocedural-Analysis.md#head6) 108 | - [Java中的method invoke](./07.Interprocedural-Analysis.md#head7) 109 | - [method signature](./07.Interprocedural-Analysis.md#head8) 110 | - [virtual call dispatch](./07.Interprocedural-Analysis.md#head9) 111 | - [ CHA](./07.Interprocedural-Analysis.md#head10) 112 | - [ 定义](./07.Interprocedural-Analysis.md#head11) 113 | - [ Resolve](./07.Interprocedural-Analysis.md#head12) 114 | - [ 全程序算法](./07.Interprocedural-Analysis.md#head13) 115 | - [Interprocedural Control-Flow Graph](./07.Interprocedural-Analysis.md#head14) 116 | - [ 定义](./07.Interprocedural-Analysis.md#head15) 117 | - [Interprocedural Data-Flow Analysis](./07.Interprocedural-Analysis.md#head16) 118 | - [ 过程间分析组成](./07.Interprocedural-Analysis.md#head17) 119 | - [Interprocedural Constant Propagation](./07.Interprocedural-Analysis.md#head18) 120 | - [ 组成](./07.Interprocedural-Analysis.md#head19) 121 | - [ 栗子](./07.Interprocedural-Analysis.md#head20) 122 | 123 | [08.Pointer-Analysis.md](./08.Pointer-Analysis.md) 124 | 125 | - [Pointer Analysis](./08.Pointer-Analysis.md#head1) 126 | - [ Motivation](./08.Pointer-Analysis.md#head2) 127 | - [Introduction to Pointer Analysis](./08.Pointer-Analysis.md#head3) 128 | - [Pointer Analysis 简述](./08.Pointer-Analysis.md#head4) 129 | - [/Pointer Analysis 和 Alias Analysis 的区别](./08.Pointer-Analysis.md#head5) 130 | - [ 指针分析在静态分析地位](./08.Pointer-Analysis.md#head6) 131 | - [Key Factors of Pointer Analysis](./08.Pointer-Analysis.md#head7) 132 | - [Pointer Analysis的四个取舍要素](./08.Pointer-Analysis.md#head8) 133 | - [Heap Abstraction](./08.Pointer-Analysis.md#head9) 134 | - [ 为什么堆抽象](./08.Pointer-Analysis.md#head10) 135 | - [Allocation-Site Abstraction](./08.Pointer-Analysis.md#head11) 136 | - [Context Sensitivity](./08.Pointer-Analysis.md#head12) 137 | - [Flow Sensitivity](./08.Pointer-Analysis.md#head13) 138 | - [Analysis Scope](./08.Pointer-Analysis.md#head14) 139 | - [ 课程涉及的特性](./08.Pointer-Analysis.md#head15) 140 | - [Concerned Statements](./08.Pointer-Analysis.md#head16) 141 | - [Pointer Analysis面向的指针类型](./08.Pointer-Analysis.md#head17) 142 | - [ Pointer Analysis面向的语句](./08.Pointer-Analysis.md#head18) 143 | 144 | [09.Pointer-Analysis-Foundations-I.md](./09.Pointer-Analysis-Foundations-I.md) 145 | 146 | - [Pointer Analysis - Foundations I](./09.Pointer-Analysis-Foundations-I.md#head1) 147 | - [Pointer Analysis:Rules](./09.Pointer-Analysis-Foundations-I.md#head2) 148 | - [ 影响指针的statements](./09.Pointer-Analysis-Foundations-I.md#head3) 149 | - [Domains and Notations](./09.Pointer-Analysis-Foundations-I.md#head4) 150 | - [ Rule](./09.Pointer-Analysis-Foundations-I.md#head5) 151 | - [How to implement Pointer Analysis](./09.Pointer-Analysis-Foundations-I.md#head6) 152 | - [ PFG](./09.Pointer-Analysis-Foundations-I.md#head7) 153 | - [实现Pointer Analysis](./09.Pointer-Analysis-Foundations-I.md#head8) 154 | - [Pointer Analysis:Algorithms](./09.Pointer-Analysis-Foundations-I.md#head9) 155 | 156 | [10.Pointer-Analysis-Foundations-II.md](./10.Pointer-Analysis-Foundations-II.md) 157 | 158 | - [Pointer Analysis with Method Calls](./10.Pointer-Analysis-Foundations-II.md#head1) 159 | - [call rule](./10.Pointer-Analysis-Foundations-II.md#head2) 160 | - [ 不加x到this](./10.Pointer-Analysis-Foundations-II.md#head3) 161 | - [Interprocedure Pointer Anaylsis Algorithm](./10.Pointer-Analysis-Foundations-II.md#head4) 162 | 163 | [11.Pointer-Analysis-Context-Sensitivity-I.md](./11.Pointer-Analysis-Context-Sensitivity-I.md) 164 | 165 | - [Pointer Analysis Context Sensitivity](./11.Pointer-Analysis-Context-Sensitivity-I.md#head1) 166 | - [ Introduction](./11.Pointer-Analysis-Context-Sensitivity-I.md#head2) 167 | - [Why Context Sensitivity](./11.Pointer-Analysis-Context-Sensitivity-I.md#head3) 168 | - [Cloning-Based Context Sensitivity](./11.Pointer-Analysis-Context-Sensitivity-I.md#head4) 169 | - [Why Context-Sensitive Heap](./11.Pointer-Analysis-Context-Sensitivity-I.md#head5) 170 | - [Context-Sensitive Heap](./11.Pointer-Analysis-Context-Sensitivity-I.md#head6) 171 | - [Context Sensitive Pointer Analysis:Rules](./11.Pointer-Analysis-Context-Sensitivity-I.md#head7) 172 | - [Domains and Notations](./11.Pointer-Analysis-Context-Sensitivity-I.md#head8) 173 | - [ Rules](./11.Pointer-Analysis-Context-Sensitivity-I.md#head9) 174 | 175 | [12.Pointer Analysis Context Sensitivity II](./12.Pointer-Analysis-Context-Sensitivity-II.md#head1) 176 | 177 | - [Context Sensitive Pointer Analysis : Algorithms](./12.Pointer-Analysis-Context-Sensitivity-II.md#head2) 178 | - [ 定义](./12.Pointer-Analysis-Context-Sensitivity-II.md#head3) 179 | - [ algorithms](./12.Pointer-Analysis-Context-Sensitivity-II.md#head4) 180 | - [Context Sensitivity Variants](./12.Pointer-Analysis-Context-Sensitivity-II.md#head5) 181 | - [Call-Site Sensitivity](./12.Pointer-Analysis-Context-Sensitivity-II.md#head6) 182 | - [ 栗子](./12.Pointer-Analysis-Context-Sensitivity-II.md#head7) 183 | - [Object Sensitivity](./12.Pointer-Analysis-Context-Sensitivity-II.md#head8) 184 | - [ 栗子](./12.Pointer-Analysis-Context-Sensitivity-II.md#head9) 185 | - [Type Sensitivity](./12.Pointer-Analysis-Context-Sensitivity-II.md#head10) 186 | - [ 对比](./12.Pointer-Analysis-Context-Sensitivity-II.md#head11) 187 | 188 | [13.Static Analysis for Security](./13.Static-Analysis-For-Security.md#head1) 189 | 190 | - [Information Flow Security](./13.Static-Analysis-For-Security.md#head2) 191 | - [Access Control vs. Information Flow Security](./13.Static-Analysis-For-Security.md#head3) 192 | - [Security Levels](./13.Static-Analysis-For-Security.md#head4) 193 | - [Information Flow Policy](./13.Static-Analysis-For-Security.md#head5) 194 | - [Confidentiality and Integrity](./13.Static-Analysis-For-Security.md#head6) 195 | - [Confidentiality vs. Integrity](./13.Static-Analysis-For-Security.md#head7) 196 | - [Integrity, Broad Definition](./13.Static-Analysis-For-Security.md#head8) 197 | - [Explicit Flows and Covert Channels](./13.Static-Analysis-For-Security.md#head9) 198 | - [Implicit Flow](./13.Static-Analysis-For-Security.md#head10) 199 | - [Covert Channels](./13.Static-Analysis-For-Security.md#head11) 200 | - [Taint Analysis](./13.Static-Analysis-For-Security.md#head12) 201 | - [ 定义](./13.Static-Analysis-For-Security.md#head13) 202 | - [ 解决confidentiality、Integrity](./13.Static-Analysis-For-Security.md#head14) 203 | - [Taint 与Pointer Analysis结合](./13.Static-Analysis-For-Security.md#head15) 204 | - [Domains and Notations](./13.Static-Analysis-For-Security.md#head16) 205 | - [Taint Analysis Input & Output](./13.Static-Analysis-For-Security.md#head17) 206 | - [Taint analysis:rule](./13.Static-Analysis-For-Security.md#head18) 207 | - [ 其他](./13.Static-Analysis-For-Security.md#head19) 208 | 209 | [14.Datalog-Based-Program-Analysis.md](./14.Datalog-Based-Program-Analysis.md) 210 | 211 | - [ Motivation](./14.Datalog-Based-Program-Analysis.md#head2) 212 | - [命令式 vs 声明示](./14.Datalog-Based-Program-Analysis.md#head3) 213 | - [Introduction to Datalog](./14.Datalog-Based-Program-Analysis.md#head4) 214 | - [Datalog 的 data](./14.Datalog-Based-Program-Analysis.md#head5) 215 | - [predicates ](./14.Datalog-Based-Program-Analysis.md#head6) 216 | - [ 通过Atoms表示predicates](./14.Datalog-Based-Program-Analysis.md#head7) 217 | - [Datalog 的 rule](./14.Datalog-Based-Program-Analysis.md#head8) 218 | - [EDB and IDB](./14.Datalog-Based-Program-Analysis.md#head9) 219 | - [ Logical](./14.Datalog-Based-Program-Analysis.md#head10) 220 | - [Logical Or](./14.Datalog-Based-Program-Analysis.md#head11) 221 | - [ Negation](./14.Datalog-Based-Program-Analysis.md#head12) 222 | - [ Recursion](./14.Datalog-Based-Program-Analysis.md#head13) 223 | - [Rule safety](./14.Datalog-Based-Program-Analysis.md#head14) 224 | - [Excution of Datalog Programs](./14.Datalog-Based-Program-Analysis.md#head15) 225 | - [Pointer Analysis via Datalog](./14.Datalog-Based-Program-Analysis.md#head16) 226 | - [EDB/IDB Model](./14.Datalog-Based-Program-Analysis.md#head17) 227 | - [Rule TO Datalog](./14.Datalog-Based-Program-Analysis.md#head18) 228 | - [Example without method call](./14.Datalog-Based-Program-Analysis.md#head19) 229 | - [Taint Analysis via Datalog](./14.Datalog-Based-Program-Analysis.md#head20) 230 | - [Datalog Pros vs Cons](./14.Datalog-Based-Program-Analysis.md#head21) 231 | 232 | [15.IFDS.md](./15.IFDS.md) 233 | 234 | - [Feasible and Realizable Paths](./15.IFDS.md#head2) 235 | - [ CFL-Reachability](./15.IFDS.md#head3) 236 | - [Overview of IFDS](./15.IFDS.md#head4) 237 | - [MOP & MRP](./15.IFDS.md#head5) 238 | - [ overview](./15.IFDS.md#head6) 239 | - [Supergraph and Flow Funcations](./15.IFDS.md#head7) 240 | - [ supergraph](./15.IFDS.md#head8) 241 | - [flow functions](./15.IFDS.md#head9) 242 | - [Exploded Supergraph and Tabulation Algorithm](./15.IFDS.md#head10) 243 | - [exploded supegraph](./15.IFDS.md#head11) 244 | - [0 -> 0](./15.IFDS.md#head12) 245 | - [exploded supegraph example](./15.IFDS.md#head13) 246 | - [tabulation algorithm](./15.IFDS.md#head14) 247 | - [Understanding the Distributivity of IFDS](./15.IFDS.md#head15) 248 | - [Can we do constant propagation using IFDS](./15.IFDS.md#head16) 249 | - [Can we do pointer analysis useing IFDS](./15.IFDS.md#head17) 250 | - [ 待解决问题](./15.IFDS.md#head18) 251 | 252 | [16.Soundiness.md](./16.Soundiness.md) 253 | 254 | - [Soundness and Soundiness](./16.Soundiness.md#head2) 255 | - [ Soundness](./16.Soundiness.md#head3) 256 | - [常见Hardness Feature](./16.Soundiness.md#head4) 257 | - [ 提出Soundiness](./16.Soundiness.md#head5) 258 | - [ Soundness,soundiness,Unsoundness](./16.Soundiness.md#head6) 259 | - [Hard Language Feature : Java Reflection](./16.Soundiness.md#head7) 260 | - [ 反射难论文](./16.Soundiness.md#head8) 261 | - [ 解决反射](./16.Soundiness.md#head9) 262 | - [String Constant analysis](./16.Soundiness.md#head10) 263 | - [ 通过调用处的信息查找](./16.Soundiness.md#head11) 264 | - [Assisted By Dynamic Analysis](./16.Soundiness.md#head12) 265 | - [Hard Language Feature : Native Code](./16.Soundiness.md#head13) 266 | - [Native code 原理](./16.Soundiness.md#head14) 267 | - [ 解决方案](./16.Soundiness.md#head15) -------------------------------------------------------------------------------- /picture/1-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/1-1.png -------------------------------------------------------------------------------- /picture/1-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/1-2.png -------------------------------------------------------------------------------- /picture/1-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/1-3.png -------------------------------------------------------------------------------- /picture/1-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/1-4.png -------------------------------------------------------------------------------- /picture/1-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/1-5.png -------------------------------------------------------------------------------- /picture/1-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/1-6.png -------------------------------------------------------------------------------- /picture/1-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/1-7.png -------------------------------------------------------------------------------- /picture/1-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/1-8.png -------------------------------------------------------------------------------- /picture/10-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/10-1.png -------------------------------------------------------------------------------- /picture/10-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/10-2.png -------------------------------------------------------------------------------- /picture/10-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/10-3.png -------------------------------------------------------------------------------- /picture/11-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/11-1.png -------------------------------------------------------------------------------- /picture/11-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/11-2.png -------------------------------------------------------------------------------- /picture/11-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/11-3.png -------------------------------------------------------------------------------- /picture/11-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/11-4.png -------------------------------------------------------------------------------- /picture/11-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/11-5.png -------------------------------------------------------------------------------- /picture/11-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/11-6.png -------------------------------------------------------------------------------- /picture/11-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/11-7.png -------------------------------------------------------------------------------- /picture/12-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/12-1.png -------------------------------------------------------------------------------- /picture/12-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/12-10.png -------------------------------------------------------------------------------- /picture/12-11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/12-11.png -------------------------------------------------------------------------------- /picture/12-12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/12-12.png -------------------------------------------------------------------------------- /picture/12-13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/12-13.png -------------------------------------------------------------------------------- /picture/12-14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/12-14.png -------------------------------------------------------------------------------- /picture/12-15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/12-15.png -------------------------------------------------------------------------------- /picture/12-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/12-2.png -------------------------------------------------------------------------------- /picture/12-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/12-3.png -------------------------------------------------------------------------------- /picture/12-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/12-4.png -------------------------------------------------------------------------------- /picture/12-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/12-5.png -------------------------------------------------------------------------------- /picture/12-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/12-6.png -------------------------------------------------------------------------------- /picture/12-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/12-7.png -------------------------------------------------------------------------------- /picture/12-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/12-8.png -------------------------------------------------------------------------------- /picture/12-9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/12-9.png -------------------------------------------------------------------------------- /picture/13-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/13-1.png -------------------------------------------------------------------------------- /picture/13-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/13-10.png -------------------------------------------------------------------------------- /picture/13-11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/13-11.png -------------------------------------------------------------------------------- /picture/13-12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/13-12.png -------------------------------------------------------------------------------- /picture/13-13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/13-13.png -------------------------------------------------------------------------------- /picture/13-14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/13-14.png -------------------------------------------------------------------------------- /picture/13-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/13-2.png -------------------------------------------------------------------------------- /picture/13-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/13-3.png -------------------------------------------------------------------------------- /picture/13-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/13-4.png -------------------------------------------------------------------------------- /picture/13-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/13-5.png -------------------------------------------------------------------------------- /picture/13-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/13-6.png -------------------------------------------------------------------------------- /picture/13-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/13-7.png -------------------------------------------------------------------------------- /picture/13-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/13-8.png -------------------------------------------------------------------------------- /picture/13-9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/13-9.png -------------------------------------------------------------------------------- /picture/14-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/14-1.png -------------------------------------------------------------------------------- /picture/14-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/14-10.png -------------------------------------------------------------------------------- /picture/14-11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/14-11.png -------------------------------------------------------------------------------- /picture/14-12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/14-12.png -------------------------------------------------------------------------------- /picture/14-13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/14-13.png -------------------------------------------------------------------------------- /picture/14-14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/14-14.png -------------------------------------------------------------------------------- /picture/14-15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/14-15.png -------------------------------------------------------------------------------- /picture/14-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/14-16.png -------------------------------------------------------------------------------- /picture/14-17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/14-17.png -------------------------------------------------------------------------------- /picture/14-18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/14-18.png -------------------------------------------------------------------------------- /picture/14-19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/14-19.png -------------------------------------------------------------------------------- /picture/14-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/14-2.png -------------------------------------------------------------------------------- /picture/14-20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/14-20.png -------------------------------------------------------------------------------- /picture/14-21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/14-21.png -------------------------------------------------------------------------------- /picture/14-22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/14-22.png -------------------------------------------------------------------------------- /picture/14-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/14-3.png -------------------------------------------------------------------------------- /picture/14-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/14-4.png -------------------------------------------------------------------------------- /picture/14-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/14-5.png -------------------------------------------------------------------------------- /picture/14-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/14-6.png -------------------------------------------------------------------------------- /picture/14-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/14-7.png -------------------------------------------------------------------------------- /picture/14-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/14-8.png -------------------------------------------------------------------------------- /picture/14-9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/14-9.png -------------------------------------------------------------------------------- /picture/15-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/15-1.png -------------------------------------------------------------------------------- /picture/15-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/15-10.png -------------------------------------------------------------------------------- /picture/15-11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/15-11.png -------------------------------------------------------------------------------- /picture/15-12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/15-12.png -------------------------------------------------------------------------------- /picture/15-13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/15-13.png -------------------------------------------------------------------------------- /picture/15-14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/15-14.png -------------------------------------------------------------------------------- /picture/15-15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/15-15.png -------------------------------------------------------------------------------- /picture/15-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/15-16.png -------------------------------------------------------------------------------- /picture/15-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/15-2.png -------------------------------------------------------------------------------- /picture/15-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/15-3.png -------------------------------------------------------------------------------- /picture/15-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/15-4.png -------------------------------------------------------------------------------- /picture/15-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/15-5.png -------------------------------------------------------------------------------- /picture/15-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/15-6.png -------------------------------------------------------------------------------- /picture/15-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/15-7.png -------------------------------------------------------------------------------- /picture/15-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/15-8.png -------------------------------------------------------------------------------- /picture/15-9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/15-9.png -------------------------------------------------------------------------------- /picture/16-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/16-1.png -------------------------------------------------------------------------------- /picture/16-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/16-10.png -------------------------------------------------------------------------------- /picture/16-11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/16-11.png -------------------------------------------------------------------------------- /picture/16-12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/16-12.png -------------------------------------------------------------------------------- /picture/16-13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/16-13.png -------------------------------------------------------------------------------- /picture/16-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/16-2.png -------------------------------------------------------------------------------- /picture/16-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/16-3.png -------------------------------------------------------------------------------- /picture/16-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/16-4.png -------------------------------------------------------------------------------- /picture/16-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/16-5.png -------------------------------------------------------------------------------- /picture/16-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/16-6.png -------------------------------------------------------------------------------- /picture/16-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/16-7.png -------------------------------------------------------------------------------- /picture/16-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/16-8.png -------------------------------------------------------------------------------- /picture/16-9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/16-9.png -------------------------------------------------------------------------------- /picture/2-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/2-1.png -------------------------------------------------------------------------------- /picture/2-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/2-2.png -------------------------------------------------------------------------------- /picture/2-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/2-3.png -------------------------------------------------------------------------------- /picture/2-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/2-4.png -------------------------------------------------------------------------------- /picture/2-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/2-5.png -------------------------------------------------------------------------------- /picture/2-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/2-6.png -------------------------------------------------------------------------------- /picture/2-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/2-7.png -------------------------------------------------------------------------------- /picture/2-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/2-8.png -------------------------------------------------------------------------------- /picture/2-9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/2-9.png -------------------------------------------------------------------------------- /picture/3-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/3-1.png -------------------------------------------------------------------------------- /picture/3-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/3-10.png -------------------------------------------------------------------------------- /picture/3-11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/3-11.png -------------------------------------------------------------------------------- /picture/3-12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/3-12.png -------------------------------------------------------------------------------- /picture/3-13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/3-13.png -------------------------------------------------------------------------------- /picture/3-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/3-3.png -------------------------------------------------------------------------------- /picture/3-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/3-4.png -------------------------------------------------------------------------------- /picture/3-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/3-5.png -------------------------------------------------------------------------------- /picture/3-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/3-6.png -------------------------------------------------------------------------------- /picture/3-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/3-8.png -------------------------------------------------------------------------------- /picture/3-9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/3-9.png -------------------------------------------------------------------------------- /picture/4-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/4-1.png -------------------------------------------------------------------------------- /picture/4-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/4-2.png -------------------------------------------------------------------------------- /picture/4-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/4-3.png -------------------------------------------------------------------------------- /picture/4-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/4-4.png -------------------------------------------------------------------------------- /picture/4-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/4-5.png -------------------------------------------------------------------------------- /picture/4-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/4-6.png -------------------------------------------------------------------------------- /picture/4-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/4-7.png -------------------------------------------------------------------------------- /picture/4-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/4-8.png -------------------------------------------------------------------------------- /picture/5-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/5-1.png -------------------------------------------------------------------------------- /picture/5-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/5-10.png -------------------------------------------------------------------------------- /picture/5-11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/5-11.png -------------------------------------------------------------------------------- /picture/5-12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/5-12.png -------------------------------------------------------------------------------- /picture/5-13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/5-13.png -------------------------------------------------------------------------------- /picture/5-14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/5-14.png -------------------------------------------------------------------------------- /picture/5-15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/5-15.png -------------------------------------------------------------------------------- /picture/5-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/5-2.png -------------------------------------------------------------------------------- /picture/5-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/5-3.png -------------------------------------------------------------------------------- /picture/5-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/5-4.png -------------------------------------------------------------------------------- /picture/5-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/5-5.png -------------------------------------------------------------------------------- /picture/5-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/5-6.png -------------------------------------------------------------------------------- /picture/5-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/5-7.png -------------------------------------------------------------------------------- /picture/5-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/5-8.png -------------------------------------------------------------------------------- /picture/5-9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/5-9.png -------------------------------------------------------------------------------- /picture/6-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/6-1.png -------------------------------------------------------------------------------- /picture/6-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/6-10.png -------------------------------------------------------------------------------- /picture/6-11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/6-11.png -------------------------------------------------------------------------------- /picture/6-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/6-2.png -------------------------------------------------------------------------------- /picture/6-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/6-3.png -------------------------------------------------------------------------------- /picture/6-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/6-4.png -------------------------------------------------------------------------------- /picture/6-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/6-5.png -------------------------------------------------------------------------------- /picture/6-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/6-6.png -------------------------------------------------------------------------------- /picture/6-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/6-7.png -------------------------------------------------------------------------------- /picture/6-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/6-8.png -------------------------------------------------------------------------------- /picture/6-9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/6-9.png -------------------------------------------------------------------------------- /picture/7-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/7-1.png -------------------------------------------------------------------------------- /picture/7-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/7-10.png -------------------------------------------------------------------------------- /picture/7-11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/7-11.png -------------------------------------------------------------------------------- /picture/7-12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/7-12.png -------------------------------------------------------------------------------- /picture/7-13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/7-13.png -------------------------------------------------------------------------------- /picture/7-14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/7-14.png -------------------------------------------------------------------------------- /picture/7-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/7-2.png -------------------------------------------------------------------------------- /picture/7-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/7-3.png -------------------------------------------------------------------------------- /picture/7-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/7-4.png -------------------------------------------------------------------------------- /picture/7-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/7-5.png -------------------------------------------------------------------------------- /picture/7-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/7-6.png -------------------------------------------------------------------------------- /picture/7-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/7-7.png -------------------------------------------------------------------------------- /picture/7-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/7-8.png -------------------------------------------------------------------------------- /picture/8-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/8-1.png -------------------------------------------------------------------------------- /picture/8-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/8-10.png -------------------------------------------------------------------------------- /picture/8-11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/8-11.png -------------------------------------------------------------------------------- /picture/8-12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/8-12.png -------------------------------------------------------------------------------- /picture/8-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/8-2.png -------------------------------------------------------------------------------- /picture/8-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/8-3.png -------------------------------------------------------------------------------- /picture/8-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/8-4.png -------------------------------------------------------------------------------- /picture/8-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/8-5.png -------------------------------------------------------------------------------- /picture/8-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/8-6.png -------------------------------------------------------------------------------- /picture/8-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/8-7.png -------------------------------------------------------------------------------- /picture/8-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/8-8.png -------------------------------------------------------------------------------- /picture/8-9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/8-9.png -------------------------------------------------------------------------------- /picture/9-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/9-1.png -------------------------------------------------------------------------------- /picture/9-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/9-2.png -------------------------------------------------------------------------------- /picture/9-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/9-3.png -------------------------------------------------------------------------------- /picture/9-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/9-4.png -------------------------------------------------------------------------------- /picture/9-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/9-5.png -------------------------------------------------------------------------------- /picture/9-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/9-6.png -------------------------------------------------------------------------------- /picture/9-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/9-7.png -------------------------------------------------------------------------------- /picture/9-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k6ymaker/NJU-static-program-analysis-node/46752c55d97de6725cd9a73563ba32de7337c4c7/picture/9-8.png -------------------------------------------------------------------------------- /thinking.md: -------------------------------------------------------------------------------- 1 | 记录我自己的一些思考 2 | 3 | ## 上下文的意义是什么,时空的合并于拆解 4 | 函数的上下文,记录的函数的某一次调用,因为一个函数可以出现整个程序执行的任意时空,时可以理解为通过callsite做的上下文,空可以理为用object做的上下文,通过callsite、object list来记录特定的某一次的函数调用,对应于没有上下文的函数的传播,就把合并到一起的数据流分开了,在数据传播图或指针传播图中,把函数调用的上下文与变量相结合,进而把数据流动中的变量在不同时空下拆开了。反过来的在对抽象中,在一个循环中多次new的对象,如果都进行分析,那么程序分析的成本就急剧升高,那么我们通过堆抽象把它合并。对于数组引发的传播,不考虑index,同样是一个合并操作。整个分析中,在出现时空的取舍的时候,针对性的进行拆分和合并。 5 | 6 | ## 指针传播可不可以翻过来传播? 7 | 8 | --------------------------------------------------------------------------------