主权项 |
一种航天器软件空间使用安全性检查方法,其特征在于:包括全局数据区溢出的检查方法和程序栈溢出的检查方法,其中:全局数据区溢出的检查方法步骤如下:(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与内存使用划分表中的约定不相符,则报告程序栈溢出。 |