1.PL(progamming Language)跟静态分析的关系。
- 在计算机领域中的编程语言中,语言核心(包括:命令式编程语言 函数式编程语言 逻辑式编程语言)是基本不变的,但是语用环境是变化繁多的,即应用领域和各类语言的不同之处是繁多的。
- 静态分析是针对PL的应用,目的在于:
- 可靠性
- 安全性
- 编译优化
- 程序理解
- 静态分析有利于理解:1.编程语言的语法和语义 2.写出更可靠 安全 高效的程序
个人的理解
- 该静态分析与逆向中的静态分析的区别和共同点
- 共同点:都是静态
- 区别:该领域更用于pwn?安全?而逆向的静态分析为了理解程序流程和作用
2.Soundness(false negatives:漏报) 和 complete(false postives:误报)的关系
- 宁可错杀,不可放过(可以有误报,不要有漏报)
- 但是做不到精确杀,即莱斯定理,不存在确切,完美的分析,两者不可兼得,只能寻找平衡
- 一般都是允许误报,不允许漏报。
3.虽然没有完美的静态分析,但是有有用的静态分析
- 在全面的情况下,在速度和精确之间有效平衡
4.静态分析的两个步骤
- 抽象化(abstraction):具体内容的各类情况,抽象化
- 抽象的转化(over-approximation):抽象进行转化(运算)
- 具体=>抽象,具体的变化=>抽象的变化
5.抽象与具体的关系
- 抽象里有各种具体结果
- 因此,可能有实际上不出现的具体结果被考虑
- 但同时,也可以反应出可能出现的错误(漏洞)
程序要点作业
1.what are the differences between static analysis and (dynamic) testing?
上边回答了
2.Understand soundness,completeness,false negatives,and false positives.
也回答了
3.why soundness is (usually)required by static analysis?
也回答了
4.how to understand abstraction and over-approximation?
也回答了