[发明专利]一种堆栈溢出的保护方法和装置无效
申请号: | 201110251173.7 | 申请日: | 2011-08-29 |
公开(公告)号: | CN102298677A | 公开(公告)日: | 2011-12-28 |
发明(设计)人: | 宋卿 | 申请(专利权)人: | 瑞斯康达科技发展股份有限公司 |
主分类号: | G06F21/02 | 分类号: | G06F21/02 |
代理公司: | 北京德琦知识产权代理有限公司 11018 | 代理人: | 牛峥;王丽琴 |
地址: | 100085 北京*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 堆栈 溢出 保护 方法 装置 | ||
1.一种堆栈溢出的保护方法,其特征在于,方法包括:
在堆栈的缓冲区内填充格式为“固定字符串+随机字符串”或“随机字符串+固定字符串”的填充字符串的步骤;
每隔预定的周期检查缓冲区内的填充值是否发生变化。
2.根据权利要求1所述的方法,其特征在于,在堆栈缓冲区内填充所述填充字符串之前还包括有:
生成长度和内容均随机的随机字符串的步骤;以及,
申请堆栈,并在栈内数据和控制信息间插入缓冲区,在堆数据的两端插入缓冲区的步骤。
3.根据权利要求1所述的方法,其特征在于,所述随机字符串每个字符的取值从0-255随机生成;固定字符串为长度固定的,且包含0x00和0x0a字符的字符串。
4.根据权利要求1所述的方法,其特征在于,所述缓冲区的长度为“固定字符串+随机字符串”长度的整数倍,或“随机字符串+固定字符串”长度的整数倍。
5.根据权利要求2所述的方法,其特征在于,所述堆的申请及插入缓冲区的步骤包括:
申请一片长度为“Len+2*bufLen”的堆内存,其中Len为实际堆内存长度,bufLen为缓冲区内存长度;
定义堆头部缓冲区指针、实际堆内存指针和堆尾部缓冲区指针;
将堆头部缓冲区的指针指向堆内存的首部地址,将实际堆内存指针指向首部地址+bufLen的位置,将堆尾部缓冲区的指针指向首部地址+bufLen+Len的位置。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括释放堆时的检查步骤:
对堆的前后两块缓冲区的填充值进行检查,若填充值被修改则提示堆溢出,不进行堆释放;若填充值未被修改则释放堆及堆缓冲区;
以及释放栈时的检查步骤:
对栈的缓冲区的填充值进行检查,若填充值被修改则不执行栈底指定的返回地址,若填充值未被修改则释放栈及栈缓冲区。
7.根据权利要求1所述的方法,其特征在于,除每隔预定的周期检查缓冲区内的填充值外,还包括对栈底地址、栈底内容、返回地址和基址指针的值、栈的大小进行检查的步骤。
8.一种堆栈溢出的保护装置,其特征在于,包括:
用于在堆栈的缓冲区内填充格式为“固定字符串+随机字符串”或“随机字符串+固定字符串”的填充字符串的缓冲区填充模块;以及,
用于每隔预定的周期检查缓冲区内的填充值是否发生变化的检查模块。
9.根据权利要求8所述的保护装置,其特征在于,所述保护装置进一步包括用于生成长度和内容均随机的随机字符串的随机字符串生成模块、申请堆栈的堆栈申请模块以及在栈内数据和控制信息间插入缓冲区的栈缓冲区插入模块和在堆数据的两端插入缓冲区的堆缓冲区插入模块。
10.根据权利要求8所述的保护装置,其特征在于,所述随机字符串每个字符的取值从0-255随机生成;固定字符串为长度固定的,且包含0x00和0x0a字符的字符串。
11.根据权利要求8所述的保护装置,其特征在于,所述缓冲区的长度为“固定字符串+随机字符串”长度的整数倍,或“随机字符串+固定字符串”长度的整数倍。
12.根据权利要求9所述的保护装置,其特征在于,所述堆栈申请模块用于在堆的申请时申请一片长度为“Len+2*bufLen”的堆内存,其中Len为实际堆内存长度,bufLen为缓冲区内存长度;
所述堆缓冲区插入模块用于在对堆插入缓冲区时定义堆头部缓冲区指针、实际堆内存指针和堆尾部缓冲区指针;并且,将堆头部缓冲区的指针指向堆内存的首部地址,将实际堆内存指针指向首部地址+bufLen的位置,将堆尾部缓冲区的指针指向首部地址+bufLen+Len的位置。
13.根据权利要求8所述的保护装置,其特征在于,所述保护装置进一步包括释放堆栈的堆栈释放模块;所述检查模块进一步用于在释放堆栈时对堆的前后两块缓冲区的填充值进行检查,若填充值被修改则提示堆溢出,堆栈释放模块不进行堆释放;若填充值未被修改则堆栈释放模块释放堆及堆缓冲区;所述检查模块还用于在释放栈时的对栈的缓冲区的填充值进行检查,若填充值被修改则不执行栈底指定的返回地址,若填充值未被修改则释放栈及栈缓冲区。
14.根据权利要求8所述的保护装置,其特征在于,所述检查模块进一步用于对栈底地址、栈底内容、返回地址和基址指针的值、栈的大小进行检查。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于瑞斯康达科技发展股份有限公司,未经瑞斯康达科技发展股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201110251173.7/1.html,转载请声明来源钻瓜专利网。
- 上一篇:基于计算机视觉的高速公路弯道检测方法
- 下一篇:信息存储系统及信息存储方法