论文部分内容阅读
C语言是广泛使用的高级编程语言之一,其发展了30多年仍然有很强的生命力,由于其本身面向底层的特点,使得它存在可能被利用的安全漏洞。C程序漏洞有很大一部分是内存访问相关漏洞,而其中大多数是由C语言库函数引起的。另外还存在资源未关闭等漏洞。C语言一些特殊的语法增加了分析的复杂度,如强制和隐式类型转化、内存覆盖等。C语言中规定了不同的基本类型在做运算时需要进行类型提升,这个过程使得变量的值发生了改变。灵活的内存访问机制使得不同的程序变量表示的物理内存区域可能有重叠,如果对变量进行了写操作需要对其他同步更新。本文以静态检测的方式,检测C语言的安全漏洞。静态分析是在不执行源程序的情况下对代码进行安全检测的方式,它包含很多方面的技术,如控制流分析、数据流分析、常量传播和指针分析等。这些分析都是在中间表示的基础上进行的,通过对源程序进行词法分析、语法分析生成抽象语法树,然后遍历抽象语法树便得到程序的中间表示。基于界标推断的循环分析使得循环分析的速度更快,而基于双向数据流的循环分析因为考虑到了数据依赖关系使得范围更精确。流敏感和上下文敏感的指针分析效率低一些,但是精确度比较高。综合精确的循环分析和指针分析可以检测出更多的C语言漏洞。