《南大软件分析》读书笔记
2021-04-28 14:53:18 14 举报
AI智能生成
《南大软件分析》思维导图大纲
作者其他创作
大纲/内容
P1
P2
Compilers and Static Analyzers
AST vs. IR
IR: Three-Address Code (3AC)
3AC in Real Static Analyzer: Soot
Static Single Assignment (SSA)
Basic Blocks (BB)
Control Flow Graphs (CFG)
P3-4
数据流分析概述
may analysis VS must analysis
数据流分析基础
Input and Output States
控制流约束的表示法
数据流分析应用
Reaching Definitions Analysis(定义可达分析)
定义
实例
算法
算法执行实例过程
Live Variables Analysis(活变量分析)
定义
实例
算法
算法执行实例过程
Available Expressions Analysis(可用表达式分析)
定义
实例
算法
算法执行实例过程
数据流分析3种应用的比较
P5-6
以另一种方式来看迭代算法
Partial Order(偏序)
Upper and Lower Bounds(上界和下界)
Lattice, Semilattice, Complete and Product Lattice
Lattice
Semilattice
Complete Lattice
Product Lattice
Data Flow Analysis Framework via Lattice
Monotonicity and Fixed Point Theorem
Monotonicity(单调性)
定义
Fixed-Point Theorem(不动点定理)
定义
两个证明
不动点的存在性
不动点是最小(最大)的
把迭代算法和不动点定理关联起来
将迭代算法和不动点定理联系起来
证明函数F是单调的
迭代算法什么时候会到达不动点
May/Must Analysis, A Lattice View
MOP and Distributivity
Meet-Over-All-Paths Solution (MOP)
Ours (Iterative Algorithm) vs. MOP
Constant Propagation
Worklist Algorithm
工作列表算法是迭代算法的一种优化
P7(Interprocedural Analysis)
Motivation
Call Graph Construction (CHA)
Call Graph(调用图)
构造CG图的4种方式,其中CHA最快,但最不精确。
Java中3种类型的方法调用
Class Hierarchy Analysis(CHA)//类层次分析
函数Resolve(𝑐𝑠) :通过CHA解析调用点的可能目标方法
CHA针对Java中3种类型的方法调用进行解析的例子
CHA的特点
CG图的构造
通过CHA构造CG图的步骤
算法
算法对应的一个例子
Interprocedural Control-Flow Graph
CFG
ICFG
ICFG = CFGs + call & return edges
Interprocedural Data-Flow Analysis
Edge transfer(边传递)
调用边传递
返回边传递
Interprocedural Constant Propagation(过程间常量传播)
一个例子
call-to-return edge的作用
kill掉LHS变量的结果
没有kill掉LHS变量的结果(会造成结果的不精确)
过程内和过程间常量传播的比较
过程间常量传播比过程内常量传播更精确
P8(Pointer Analysis)
Motivation
CHA和Pointer Analysis的比较
Pointer Analysis能够解决CHA的不精确问题
Introduction to Pointer Analysis
指向分析的一个例子
Pointer Analysis 和 Alias Analysis(别名分析的比较)
指向分析的应用
Key Factors of Pointer Analysis
Heap Abstraction//堆抽象(How to model heap memory?)
动态执行和静态分析的区别
Allocation-Site Abstraction(分配点抽象)
Storeless(无存储)
Context Sensitivity//上下文敏感(How to model calling contexts?)
上下文敏感
区分方法的不同调用上下文,多次分析每种方法,每种情况分析一次。
上下文非敏感
合并方法的所有调用上下文,一次分析每种方法。
Flow Sensitivity//流敏感(How to model control flow?)
流敏感
遵守语句的执行顺序,在每个程序位置维护指向关系图(map of points-to relations)。
非流敏感
忽略控制流顺序,将程序视为一组无序语句,维护整个程序的一张指向关系图。
Analysis Scope//分析范围(Which parts of program should be analyzed?)
整个程序
计算程序中所有指针的指向信息,为所有可能的客户提供信息。
需求驱动
仅计算可能影响特定的需要(按需)的指针的指向信息,提供特定客户的信息。
本课程采用的指向分析
Allocation-Site Abstraction(分配点抽象)、上下文敏感/上下文非敏感、非流敏感、整个程序
Concerned Statements
Java中的指针
本地变量(Local variable)、静态域(Static field)、实例域(Instance field)、数组元素(Array element)
Pointer-Affecting Statements(指针影响语句)
New、Assign、Store、Load、Call
P9-10(Pointer Analysis Foundations)
Pointer Analysis: Rules
Pointer-Affecting Statements(指针影响的语句)
Domains and Notations(域和符号)
Rules(规则)
New
Assign
Store
Load
How to Implement Pointer Analysis
如何实现指向分析?
Pointer Flow Graph (PFG)
定义
PFG
节点
边
Pointer Analysis: Algorithms
算法
Worklist (WL)
Handling of New and Assign
Differential Propagation(差分传播)
Handling of Store and Load
算法的一个例子
Pointer Analysis with Method Calls
存在方法调用时的指向分析
Rule: Call
规则
符号的含义
Dispatch(𝑜𝑖,k)
𝑚𝑡ℎ𝑖𝑠
𝑚𝑝𝑗
𝑚𝑟𝑒𝑡
例子
Interprocedural Pointer Analysis(过程间指向分析)
算法
AddReachable(𝑚)
ProcessCall(𝑥, 𝑜𝑖)
Algorithms Output
Points-to Relations (pt)
Call Graph (CG)
算法的一个例子
P11-12(Pointer Analysis Context Sensitivity)
Introduction
Context Sensitive Pointer Analysis: Rules
Context Sensitive Pointer Analysis: Algorithms
Context Sensitivity Variants
P13(Static Analysis for Security)
Information Flow Security
Confidentiality and Integrity
Explicit Flows and Covert Channels
Taint Analysis
P14(Datalog-Based Program Analysis)
Motivation
Introduction to Datalog
Pointer Analysis via Datalog
Taint Analysis via Datalog
P15(CFL-Reachability and IFDS)
Feasible and Realizable Paths
CFL-Reachability
Overview of IFDS
Supergraph and Flow Functions
Exploded Supergraph and Tabulation Algorithm
Understanding the Distributivity of IFDS
P16(Soundiness)
Soundness and Soundiness
Hard Language Feature: Java Reflection
Hard Language Feature: Native Code
0 条评论
下一页