- 静态检查
- 静态分析的概念
- 定义
- 程序静态分析是指在不运行代码的方式下,通过各种分析工具对程序代码进行扫描并做出评估的过程。
- 特点
- 不实际执行程序,只是通过对代码的静态扫描对程序进行分析
- 执行速度快、效率高
- 静态分析技术
- 类型检查
- 风格检查
- 风格检查程序所显示的错误常只是影响代码的可读性和可维护性,而不是程序运行过程中会发生的某种错误
- 程序理解
- 程序理解最主要的用途在于帮助理解程序,搞懂代码库中的大量代码。它是一个从计算机程序中获取知识信息的过程,这些知识信息可以用于程序排错、增强程序、重用程序和整理文档等工作。在很多集成开发环境(IDE)中,都包括了一些初级的程序理解功能,比如:查找本变量的声明和使用位置。更高级一点的还能帮助查找类之间的关联关系等。
- 程序验证和属性检查
- 程序验证是对源代码进行分析,如果源代码符合预先专门制定的一份描述程序行为的规格说明,那么则说明该程序完好。
- 属性检查的方法跟程序验证的方法从本质上是一样的,它们的区别在于,属性检查依据的只是描述部分程序行为的部分规格说明,而程序验证依据的是描述所有程序行为的规格说明。
- Bug查找
- Bug查找是指按照预先制定的一些共同认同的规则,来查找程序中存在的一些bug。
- 安全审查
- 以安全为中心的静态分析
- 现代安全分析工具往往更像是一种属性检查程序和bug查找程序的混合体,许多安全属性能被简洁的表达为程序属性,对于一个属性检查程序来说,搜索潜在的缓冲区溢出漏洞可以当做是检查这样的程序属性:“程序不会访问被分配内存的边界之外的地址”
- 安全分析工具采纳了这样一种观念,即开发人员往往会继续再使用相同的不安全的方法来解决问题,这可说成是一种不安全的惯例。
- 代码安全静态分析工具的引入
- 对程序员来说,对安全编程所需的知识缺乏理解会导致其所编写的代码不符合安全规范而引发安全问题,另外,即使是经验丰富的程序员也无法完全避免在代码编写的过程中出现或多或少的拼写错误,这类简单错误有时也可能引发安全问题。
- 静态分析工具能够完整而客观地进行程序检测,而不管编码人员是否了解哪些代码是与安全相关的。
- 当一种新的攻击出现时,静态分析工具可以迅速地对相关代码进行复查,同时分析该新型攻击能否对代码构成威胁。在被发现之前,某些安全缺陷已在程序中存在很久了,静态分析工具有能力针对新发现的缺陷类型对遗留代码进行检查。
- 尽管误报难以避免,但从安全的角度看,漏报才是最严重的局限性。
- HP Fortify
- 静态分析的过程
- 提取源代码
- 根据分析需求把程序源代码变换成易于分析处理的程序模型。在这个过程用到了编译原理中的成熟技术。
- 语法分析
- 语法解析
- 抽象语法
- 语义分析
- 跟踪控制流
- 跟踪数据流
- 污染传播
- 指针别名歧义
- 将代码按照检查规则执行分析
- 组成
- 断言
- 本地分析法
- 全局分析
- 定义及分类
- 规则格式:专用的规则文件、批注
- 用于传播的规则
- 源规则
- 按照制定的报告模式生成分析报告
- 将所报告的结果进行分类并分组
- 消除所报告的结果中非预期的部分
- 对所报告结果的意义进行解释
兄弟们学累了看一会程序员笑话吧:
1、从前,有一个程序猿,他得到了一盏神灯。灯神答应实现他一个愿望。然后他向神灯许愿,希望在有生之年能写一个好项目。后来…后来…他得到了永生。
2、深度优先和广度优先:深度优先就是追一个mm追到底,直到失败然后换个mm继续追;广度优先就是同时追多个mm,一起发展。
3、前端工程师说,我去交友网站找女朋友去了。朋友问,找到了么?工程师说,找到了他们页面的一个bug……
4、我的初恋是C,曾经暗恋过java,迷恋过C++,C#也是过客,现在疯狂追求Python,而Ruby,PHP也渐渐闯入了我的视野……