[发明专利]一种重构CoSy中间表示的缓冲区溢出检测方法有效
申请号: | 201210077106.2 | 申请日: | 2012-03-22 |
公开(公告)号: | CN102662834A | 公开(公告)日: | 2012-09-12 |
发明(设计)人: | 张梅娟;阮园;黄嵩人;于宗光 | 申请(专利权)人: | 中国电子科技集团公司第五十八研究所 |
主分类号: | G06F11/36 | 分类号: | G06F11/36;G06F9/45 |
代理公司: | 无锡市大为专利商标事务所 32104 | 代理人: | 殷红梅 |
地址: | 214035 江*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 cosy 中间 表示 缓冲区 溢出 检测 方法 | ||
1.一种重构CoSy中间表示的缓冲区溢出检测方法,其特征在于,包括以下步骤:
a、CoSy编译器分析扫描源程序,生成中间表示文档CCMIR;
b、重构CCMIR文本,并为每个局部变量增加安全属性,用于对缓冲区溢出进行判定;
c、对重构后的CCMIR进行缓冲区溢出的判定。
2.根据权利要求1所述的重构CoSy中间表示的缓冲区溢出检测方法,其特征在于,步骤a中编译器对源程序进行词法分析和语法分析,生成文本格式的中间表示文档CCMIR。
3.根据权利要求1所述的重构CoSy中间表示的缓冲区溢出检测方法,其特征在于,所述步骤b包括:
b1. 定义DTD规则,将CCMIR文本转化为XML文本存储;
b2. 利用解析工具重新建立CCMIR文档,并在重构的过程中对每个非静态局部变量增加安全属性,用来对缓冲区溢出进行判断;
b3. 在重构的过程中去掉与分析程序流和数据流无关的信息。
4.根据权利要求3所述的重构CoSy中间表示的缓冲区溢出检测方法,其特征在于,所述步骤b1将CCMIR文本分为四类,用于定义DTD规则:
第一类、CCMIR的标识位:每遇到一个标识位bbx,建立一个结点元素node与之对应,将结点的标识属性值记录为x;
第二类、变量声明:为每一个变量建立结点元素node的子元素variable,variable有四个属性,分别是:变量名称、变量类型、变量的大小、变量存储类别。
5.所述变量的存储类别分为静态存储区和动态存储区;若该变量是结构体或联合体变量,则为其每个成员变量建立属性;
第三类、记录中的表达式:为每个表达式建立结点元素node的子元素expression,expression有两个属性,分别是:表达式类型和具体的表达式内容,所示表达式类型用来区分一般表达式和函数调用;
第四类、记录中的跳转语句:跳转语句包含goto语句和if语句;为跳转语句建立边元素edge,在边元素中建立四个子元素,分别是:from元素记录起始节点、to_l元素记录左子树节点、to_r元素记录右子树节点、if_condition元素记录跳转条件,如果不存在if语句,则if_condition值为1。
6.根据权利要求4所述的重构CoSy中间表示的缓冲区溢出检测方法,其特征在于,步骤b2利用XML文本解析器解析XML文本,重新建立CCMIR,步骤为:
b21. 依次读入XML文本的元素;
b22. 判断读入的是结点元素还是边元素;
b23. 若读入的是结点元素,则根据其变量类型属性建立相应的树节点,读子元素及其属性,判断是否需要给该变量增加安全属性;
b24. 若读入的是边元素,就在from、to_l和to_r标识的节点之间建立复杂关系。
7.根据权利要求5所述的重构CoSy中间表示的缓冲区溢出检测方法,其特征在于,步骤b23所述的安全属性的增加方法是:若子元素为variable,读该子元素的变量存储类别属性,若所述变量存储类别属性为动态存储区,则为该变量增加整数区间对,即安全属性;若该变量是结构体或联合体变量,则为该变量的每个成员添加安全属性。
8.根据权利要求5所述的重构CoSy中间表示的缓冲区溢出检测方法,其特征在于,步骤b23所述的安全属性包括:一个整数区间对,该区间对表示对应变量的初始分配区间alloc和实际长度区间len,初始分配区间alloc表示为:alloc(v)=[v_alloc_lower, v_alloc_upper];实际长度区间len表示为:len(v)=[v_len_lower, v_len_upper]; v_alloc_upper,v_len_upper和v_alloc_lower, v_len_lower分别表示初始分配区间上限、实际长度区间上限,和初始分配区间下限、实际长度区间下限。
9.根据权利要求7所述的重构CoSy中间表示的缓冲区溢出检测方法,其特征在于,步骤c将与缓冲区相关的待分析源程序语句与函数调用抽象为对局部变量属性信息的操作,即对初始分配区间alloc和实际长度区间len进行更新;
判断每个缓冲区的状态:
c1) 若v_len_upper≤v_alloc_lower,则判断该缓冲区不会溢出;
c2) 若v_alloc_upper<v_len_lower,则肯定会发生缓冲区溢出;
c3) 若以上两者都不满足,则可能会发生缓冲区溢出;
对c2和c3的情况做出报警提示。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国电子科技集团公司第五十八研究所,未经中国电子科技集团公司第五十八研究所许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201210077106.2/1.html,转载请声明来源钻瓜专利网。