发明名称 一种航天器软件空间使用安全性检查方法
摘要 一种航天器软件空间使用安全性检查方法,是一种针对航天器软件内存空间使用安全的检查方法,目的在于检查航天器软件是否会出现内存使用违例的情况,包括全局数据区溢出的检查方法和程序栈溢出的检查方法。全局数据区溢出的检查方法主要检查软件编译固化时,全局变量占用的空间是否超过了静态分配的空间。程序栈溢出的检查方法主要是分析软件运行时,程序使用的栈空间是否可能超过静态分配的栈空间大小。本发明提出的检查方法能够在不需要运行软件的情况下,完成上述两种软件空间使用安全问题的检查,具有良好的适应性。本发明方法的复杂度低,适用于大规模软件。
申请公布号 CN103745153A 申请公布日期 2014.04.23
申请号 CN201310746198.3 申请日期 2013.12.30
申请人 北京控制工程研究所 发明人 陈睿;王政;董晓刚;关小川;綦艳霞;顾斌;陈尧
分类号 G06F21/52(2013.01)I 主分类号 G06F21/52(2013.01)I
代理机构 中国航天科技专利中心 11009 代理人 陈鹏
主权项 一种航天器软件空间使用安全性检查方法,其特征在于:包括全局数据区溢出的检查方法和程序栈溢出的检查方法,其中:全局数据区溢出的检查方法步骤如下:(1)建立内存使用划分表,约定C语言源代码中各个全局变量的内存占用区域及程序栈的内存占用区域;(2)分析C语言源代码,获取所有的全局变量名及其类型;(3)对于每个全局变量,执行以下操作:(31)分析C语言源代码编译固化时生成的mapfile,获取该全局变量的首地址h;(32)根据全局变量的首地址和类型,计算该全局变量占用的内存区域,方法如下:(321)如果全局变量的类型是整型或浮点型,则该全局变量占用的内存区域从h到(h+类型长度–1);(322)如果全局变量的类型是除整型和浮点型以外的其他类型,则令tmpAddr=h,对于该全局变量的每个成员,从第一个成员开始迭代计算tmpAddr=tmpAddr+size+(tmpAddr%size),则该全局变量占用的内存区域是h到(tmpAddr–1),其中size是成员的类型长度,%的含义是取余数;(33)比对内存使用划分表,如果该全局变量占用的内存区域与内存使用划分表中的约定不相符,则报告全局数据区溢出;程序栈溢出的检查方法步骤如下:(1)建立内存使用划分表,约定C语言源代码中各个全局变量的内存占用区域及程序栈的内存占用区域;(2)分析C语言源代码,从程序入口函数开始,根据函数调用关系,对所有被调用的函数进行深度遍历,查找到所有的函数调用路径;所述的函数调用路径是从程序入口函数开始的一个函数序列,除程序入口函数之外,该序列中的每一个函数都被相邻的前一个函数调用,且序列中的最后一个函数不再调用其他函数;(3)对于每一个函数调用路径,通过查找C语言源代码编译固化时生成的mapfile,获取该函数调用路径上每一个函数运行时占用的内存空间大小;将该函数调用路径上每一个函数运行时占用的内存空间大小相加,得到该函数调用路径的内存占用空间s;(4)对比内存使用划分表,如果s与内存使用划分表中的约定不相符,则报告程序栈溢出。
地址 100080 北京市海淀区北京2729信箱