[发明专利]面向源代码的基于不等式组求解的缓冲区溢出检测方法无效
申请号: | 200810057757.9 | 申请日: | 2008-02-15 |
公开(公告)号: | CN101241532A | 公开(公告)日: | 2008-08-13 |
发明(设计)人: | 徐国爱;张淼;刘宇航;杨义先 | 申请(专利权)人: | 北京邮电大学 |
主分类号: | G06F21/22 | 分类号: | G06F21/22 |
代理公司: | 北京德琦知识产权代理有限公司 | 代理人: | 夏宪富 |
地址: | 100876*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 面向 源代码 基于 不等式 求解 缓冲区 溢出 检测 方法 | ||
1、一种面向源代码的基于不等式组求解的缓冲区溢出检测方法,其特征在于,包括下列操作步骤:
(1)为描述危险函数的约束条件进行初始化设置:定义缓冲区相关参数的长度属性,规定缓存区中的参数或变量的表示方法,并对包括赋值操作的多个C/C++库函数分别建立其发生缓存溢出的不等式约束条件;
(2)对输入的程序源代码进行词法和语法解析并生成程序依赖图:在利用词法分析识别出的词法单元的基础上,进行语法分析,以便得到抽象语法树,即程序结构的树形表示;再从该抽象语法树中提取出危险函数及其相关的指针,用作后续分析的基础;然后对程序分别进行数据流分析和控制流分析,提取代码中包括指针变量、内存块、常量、函数结构的数据依赖的相关信息,获取程序中的相关语句之间的控制依赖关系,生成对应的程序依赖图;
(3)根据危险函数库中发生缓冲区溢出的不等式约束条件,在程序依赖图中查找有关危险函数调用的语句:如果没有发现危险函数调用,则判定该程序没有缓冲区溢出的风险,并结束检测流程;如果发现有危险函数调用,则要分别对每个危险函数执行后续操作步骤;
(4)针对当前查找到的危险函数,在程序依赖图中查找与该危险函数有数据依赖或控制依赖关系的语句,形成依赖语句序列,即不等式组:通过程序控制依赖图,对每个危险函数的调用分别生成一个依赖语句序列,该序列中的依赖语句与该危险函数之间存在有数据依赖、控制依赖、或同时存在数据依赖和控制依赖的关系;
(5)验证发生缓冲区溢出的不等式的约束条件是否成立:将判断危险函数不等式约束条件是否成立的问题转化为判断步骤(4)中的不等式组是否有解;如果不等式组有解,即满足约束条件,则不存在缓冲区溢出;否则,认为存在缓冲区溢出风险,并输出存在缓冲区溢出的告警信息。
2、根据权利要求1所述的缓冲区溢出检测方法,其特征在于:所述程序依赖图是一种用图形表示程序中的各个语句间的依赖关系的方法,程序依赖图中的节点对应于源代码中的语句,各个节点之间的连接线表明相关语句之间的依赖关系,以便用清晰的图形表示各个语句之间存在的控制依赖或数据依赖的关系。
3、根据权利要求1所述的缓冲区溢出检测方法,其特征在于:每个危险函数的调用所生成的程序语句序列中的语句,对危险函数的指针的影响有以下三种情况:
(41)赋值:通过赋值改变危险函数缓冲区参数的属性,造成属性改变的原因包括:内存分配、指针引用、以及在缓冲器中读写数据;
(42)函数调用:如果涉及某个危险函数的指针的依赖函数也是危险函数,则会形成一个涉及多个缓冲区的包括数组、指针和其他相关参数的多元不等式组;如果与当前危险函数有依赖关系的函数是自定义函数,则要进一步分析该函数的代码,继续查找是否存在危险函数,并记录所找到的危险函数;
(43)控制关系:如果控制关系不牵涉当前危险函数的缓冲区,则该控制关系与当前危险函数的缓冲区参数之间没有相互制约关系;否则,就要对该控制关系的逻辑表达式进行解析。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京邮电大学,未经北京邮电大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200810057757.9/1.html,转载请声明来源钻瓜专利网。
- 上一篇:一种AlGaInP基多层结构的深槽刻蚀方法
- 下一篇:浮栅制备方法