[发明专利]一种航天软件系统溢出检测和破坏限制机制有效
申请号: | 201410060565.9 | 申请日: | 2014-02-21 |
公开(公告)号: | CN103853662A | 公开(公告)日: | 2014-06-11 |
发明(设计)人: | 李尚杰;周启平;卓保特;程胜;陈星宇 | 申请(专利权)人: | 北京神舟航天软件技术有限公司 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 北京世誉鑫诚专利代理事务所(普通合伙) 11368 | 代理人: | 孙国栋 |
地址: | 100094*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 航天 软件 系统 溢出 检测 破坏 限制 机制 | ||
1.一种航天软件系统溢出检测和破坏限制机制,其特征在于:所述溢出检测和破坏限制机制是一种基于双栈纠缠执行的缓冲溢出检测和破坏隔离机制,步骤如下:将任务运行栈分割成平均的两部分,函数的调用分别交叉在两个栈中进行,实现缓冲区溢出检测和破坏限制;
首先是溢出检测和破坏限制栈空间被分割为2部分,确保了至少1/2栈的有效性;其次是改变了函数返回时控制流转移的方向,使得控制流转移和溢出具有异向性。
2.根据权利要求1中所述的航天软件系统溢出检测和破坏限制机制,其特征在于:所述任务运行栈根据函数调用顺序和后进先出的原则压入栈帧;每个栈帧设置一个编号,以表示其相对栈底的位置;根据栈帧的编号,一个栈帧编号为k,那么它所直接调用的所有函数的栈帧为k+1;双栈纠缠执行为:所有编号为奇数的栈帧被依次安排在一起,所有编号为偶数的栈帧被安排在一起,当一个函数调用子函数时,会完成如下操作:
1)、call指令将返回值保存在父函数的栈帧中;
2)、切换到子函数的栈帧;
3)、复制函数参数到子函数栈帧;
4)、分配局部变量空间;
5)、继续子函数逻辑执行;
6)、当子函数完成执行后,根据父函数栈帧中保存的返回地址返回父函数继续执行。
3.根据权利要求2中所述的航天软件系统溢出检测和破坏限制机制,其特征在于:所述步骤1)中,双栈纠缠执行的栈帧除了临时变量之外必须维持相应的控制结构;当发生函数调用和函数返回时,控制结构保证了栈帧之间的平滑切换;
双栈执行也必须维持栈帧之间的顺序关系,当调用一个函数时,须保证在正确位置上创建新的栈帧;当从一个函数返回时,必须保证能回到调用函数的栈帧上继续执行;在任务运行栈中,只有栈顶的栈帧是活动,其它栈帧是非活动的。
4.根据权利要求2中所述的航天软件系统溢出检测和破坏限制机制,其特征在于:所述步骤2)中双栈纠缠执行的函数调用过程为:首先,父函数为子函数准备参数,按照一定的顺序将参数压入栈中,然后调用call指令,将call指令下一条指令作为返回值压入栈中,并且将eip设定为被调用函数的入口地址继续执行;接下来的控制由子函数的程序逻辑决定,直到函数准备返回。
5.根据权利要求2中所述的航天软件系统溢出检测和破坏限制机制,其特征在于:所述双栈纠缠执行的函数返回过程的一个基本原则就是将栈的基本形态调整为执行call指令之前的形式;
第1条指令将ptop指向的caller栈帧的顶部设置给寄存器,由于子函数已经完成计算,它的局部变量和临时空间将被丢弃,直接将寄存器设置为caller栈帧顶部是合理的;第2条指令将父函数栈帧顶地址设置为caller父函数的栈帧顶部,由于caller的父函数的栈帧下紧邻子函数的栈帧位置,因此,子函数的帧底就是父函数栈帧顶地址的值;第3、4条指令将栈帧基设置为寄存器,利用栈操作恢复caller的栈帧基地址;第5条指令则将父函数栈帧的基地址设置为caller的父函数栈帧基地址。至此,栈帧完全恢复到call指令执行之后的布局,上述过程完成了函数返回的准备工作;第6条指令ret返回。
6.根据权利要求5中所述的航天软件系统溢出检测和破坏限制机制,其特征在于:所述函数参数处理函数调用的参数由父函数准备,并且按照一定的规则压入自己的栈帧中;而子函数则处于自己的栈帧进行操作;
在双栈纠缠执行中,由于父函数的栈帧和子函数的栈帧是分割开的,直接利用父函数栈帧顶地址同时引用函数参数和局部变量是不现实的;父函数的栈帧顶由父函数栈帧顶地址指定。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京神舟航天软件技术有限公司,未经北京神舟航天软件技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201410060565.9/1.html,转载请声明来源钻瓜专利网。