【软件分析/静态程序分析学习笔记】1.静态程序分析(Static Program Analysis)介绍

写在前面的话

本渣有幸成为南京大学软件学院研究生,在前往仙林校区蹭课的时候偶然发现了这门宝藏课程,听了以后感觉深有收获,但又因为课程难度较大,国庆假期归来发现遗忘较多,因此开了一坑来记录自己对每节课知识点的理解。也由于这是本人第一次开坑写博客,结构内容自有诸多不合理之处,希望有问题的地方大家可以指出。

彩蛋:这门课程在课表上名叫软件分析,但是实际上应该叫做静态程序分析,老师说这样起名主要是怕静态程序分析这个名字太高大上,吓到学生导致没人敢选。


系列文章目录

1.静态程序分析(Static Program Analysis)介绍
2.中间表示(Intermediate Representation)
3.数据流分析(Data Flow Analysis) (上):可达性分析(Reaching Definitions)
4.数据流分析Data Flow Analysis) (下):存活变量分析(Live Variables Analysis)及可用表达式分析(Available Expressions Analysis)
5.数据流分析基础(Data Flow Analysis-Foundations)
6.过程间分析(Interprocedural Analysis)
7.指针分析(Pointer Analysis)入门
8.指针分析基础知识(Pointer Analysis Foundations)


一、PL和Static Analysis

PL即Programming Languages,程序语言的统称。

【软件分析/静态程序分析学习笔记】1.静态程序分析(Static Program Analysis)介绍
由上图可以直观地看出,三者成包含关系,而完美的程序分析就是中间的Truth,一个既Sound又Complete的状况,而我们正常的程序分析只能获得要么sound要么complete的结果,一种useful的结果。
简单来说,sound是一种过多的输出,输出的是全部的真实报错和部分的虚假报错;而complete与之相反,输出的是全是真是报错,但是比truth少了一部分的报错。
由上可知,我们在实际使用场景中,自然是希望输出是sound的,也就是说我情愿有误报而不要有漏报。
【软件分析/静态程序分析学习笔记】1.静态程序分析(Static Program Analysis)介绍
如图所示,将左侧的数值对应到右侧的抽象符号上,前三个符号是正负零,比较容易理解。
第四个符号unknown指得是,如果当前数值会因为变量改变而呈现为不同的状态,则全部定义为unknown。
第五个符号undefined指的是经过判断肯定不符合int定义的,例如一个除以0的数或者字符等。

2. 定义转换函数

【软件分析/静态程序分析学习笔记】1.静态程序分析(Static Program Analysis)介绍
如图所示,将全部转换函数定义好以后,覆盖了所有的情况以后就可以进行运算了。
由上而下一步步进行运算,xyz三者没有疑问,而a虽然我一眼就能看出运算结果是正数,但是根据抽象运算规则定义,得到的数值应当是unknown。以下同理,且由于未定义arr,p和q的结果是undefined。

3. 控制流运算

【软件分析/静态程序分析学习笔记】1.静态程序分析(Static Program Analysis)介绍

右图是左图的运算流展示,在不同情况下y会有值,而根据sound原则,在最后一步的y值只能是unknown。

六、总结

以上就是第一节课主要讲的内容了,本人水平有限,有的地方可能解释的不大清楚,如果有错漏之处,还望指正,谢谢你的观看!

来源:童年梦

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年9月10日
下一篇 2020年9月10日

相关推荐