[发明专利]源代码缺陷分析中一种基于区域的内存建模方法无效
| 申请号: | 201010103371.4 | 申请日: | 2010-02-01 |
| 公开(公告)号: | CN101937390A | 公开(公告)日: | 2011-01-05 |
| 发明(设计)人: | 许中兴;张健;张* | 申请(专利权)人: | 许中兴;张健;北京测腾信息技术有限公司 |
| 主分类号: | G06F11/36 | 分类号: | G06F11/36;G06F12/02 |
| 代理公司: | 北京安博达知识产权代理有限公司 11271 | 代理人: | 徐国文 |
| 地址: | 100190 北京市海淀区中关村南四*** | 国省代码: | 北京;11 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 源代码 缺陷 分析 一种 基于 区域 内存 建模 方法 | ||
技术领域
本发明涉及一种在软件源代码中检测缺陷的技术,确切的说,涉及一种软件源代码缺陷分析中一种基于区域的内存建模方法,属于计算机信息安全技术领域。
背景技术
程序分析的目的之一是建立从程序中的表达式到其所对应的值的映射。程序固有的操作模型是不利于对程序的正确性进行分析的,所以需要建立一个新的模型对程序进行分析。建模有多种方法,例如可以使用数学中的格、自动机或者是完整的程序状态模型,这三种建模方法对应的分析方法分别是数据流分析、模型检测和符号执行,建模方式的不同决定了分析方法的不同。在程序的执行过程中,程序的每一点的状态都是具体可知的,只需要读取程序的内存状态,检查它是否满足正确性条件的描述,此种做法就是软件的动态测试。给一个输入,运行程序,看结果是否满足正确性要求。软件测试的不足之处在于它只能检查在一种输入下的正确性,换一种输入,则需要重新执行一遍程序。然而程序的输入是无穷多的,在一般情况下不可能穷举所有的可能性进行测试,这种测试不能保证程序正确的原因。
数据流分析是一组在不运行程序的条件下,从程序中获取数据流信息的技术,所以较静态分析,数据流信息有:可到达的变量定义、可用的表达式、别名信息等等。从分析的精度来分类,数据流分析可以分为流不敏感、流敏感和路径敏感三种,再以错误检测为目标的静态分析中,需要的是精确的信息,路径敏感的分析方法就变的非常的适用。传统数据流分析的方法包括:Allen的强连通区域方法、Kildall的迭代法、Ullman的T1-T2分析、Kennedy的node-listing算法、Farrow,Kennedy,Zucconi的图语法方法、消去法,比如区间分析、Rosen的语法导向方法、结构分析、slotwise分析。
对于C语言程序的分析一直有一个困难的问题是,由于C语言中指针的存在,由指针引起的别名问题不好解决。所谓别名就是对于同一块内存,有不同的表达式可以指向它。C语言在类型的转换方面相当灵活,对指针的类型转换更是限制很少。程序员几乎可以在任意类型的指针之间进行转换,这对精确的程序分析造成了极大的困难,从而对指针相关的缺陷检测也变得困难重重。
目前在编译器和程序分析工具中解决别名问题的办法是使用各种别名分析和指针分析算法,给出在一个程序点处,能够指向同一个内存块的所有表达式的集合。但是这类别名分析算法不适用于需要精确分析的代码缺陷检测工具,因为它给每个内存块关联的是一个表达式的集合,这样得到的结果过于粗略,使得缺陷分析得到许多虚假报错,甚至无法进行。
另一种较为通用的内存建模方法是直接建立从变量到它的值的映射。在一般的检测工具中,并没有建立复杂的内存模型,而是直接建立从变量到它们的值的映射。这种简单的存储模型在处理不包含指针的代码时,还可以适用。但是对于包含指针的代码,由于指针引入了复杂的别名关系,对于存储块的区分无法直接从名字进行,这种简单内存模型就无法适用,从而大大削弱了检测工具的能力。
例如对于程序:
void f(){
intx;
x=3;
}
通常将其存储建模为一个从变量”x”到值3的映射。这种直接映射对于不包含指针的普通变量是可以表示的。但是C程序中使用大量的指针,数组,结构等语法结构,例如下面的程序:
void f(){
struct s{
int x;
int z[2];
}d;
int*p=malloc(10)
}
其中指针变量*sp的值就无法通过直接映射进行建模,并且数组变量z和数组元素z[0],z[1]的关系也无法表示。
又例如对于代码:
int a[10];
int*p;
p=a;
p++;
*p=3;
这里既有数组变量,也有指针算术,普通的直接从变量到值的内存模型根本无法处理这样的程序。
发明内容
本发明的目的:基于区域的内存建模方法针对缺陷分析中常用的路径敏感分析方法,给出了一种精确的从表达式到其对应的内存块的计算方法。有了这种计算方法,就可以精确的表示指针变量的值、数组变量和数组元素的关系、指针类型转换等这些复杂的内存结构,也就是说可以精确的表示程序中每个表达式的值,对表达式进行精确的求值,从而可以对程序进行多种缺陷分析。
为实现上述发明目的,本发明所提供的技术方案的基本构思如下:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于许中兴;张健;北京测腾信息技术有限公司,未经许中兴;张健;北京测腾信息技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201010103371.4/2.html,转载请声明来源钻瓜专利网。





