CN103745153A - 一种航天器软件空间使用安全性检查方法 - Google Patents
一种航天器软件空间使用安全性检查方法 Download PDFInfo
- Publication number
- CN103745153A CN103745153A CN201310746198.3A CN201310746198A CN103745153A CN 103745153 A CN103745153 A CN 103745153A CN 201310746198 A CN201310746198 A CN 201310746198A CN 103745153 A CN103745153 A CN 103745153A
- Authority
- CN
- China
- Prior art keywords
- inspection method
- memory
- global variable
- function
- software
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3644—Software debugging by instrumenting at runtime
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Quality & Reliability (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
一种航天器软件空间使用安全性检查方法,是一种针对航天器软件内存空间使用安全的检查方法,目的在于检查航天器软件是否会出现内存使用违例的情况,包括全局数据区溢出的检查方法和程序栈溢出的检查方法。全局数据区溢出的检查方法主要检查软件编译固化时,全局变量占用的空间是否超过了静态分配的空间。程序栈溢出的检查方法主要是分析软件运行时,程序使用的栈空间是否可能超过静态分配的栈空间大小。本发明提出的检查方法能够在不需要运行软件的情况下,完成上述两种软件空间使用安全问题的检查,具有良好的适应性。本发明方法的复杂度低,适用于大规模软件。
Description
技术领域
本发明涉及一种航天器软件在运行过程中空间使用的检查方法,可以检查出航天器软件是否会出现内存使用违例的情况。
背景技术
作为一种嵌入式软件,航天器软件采用静态分配的方式使用内存。为此,要建立内存使用划分表。在这张表中,内存被固定划分为若干个区域,至少包括一个全局数据区、一个或多个程序栈,这些区域不得交叠。软件运行时,不得跨区域进行内存操作。表1给出了一个内存使用划分表的例子。
表1航天器软件内存划分
起始地址~终止地址 | 大小 | 描述 |
0x1000000~0x103FFFF | 256K | 全局数据区 |
0x1040000~0x1040FFF | 4K | 数据隔离区 |
0x1041000~0x1042FFF | 8K | 重要数据一区 |
0x1043000~0x1043FFF | 4K | 数据隔离区 |
0x1044000~0x1045FFF | 8K | 重要数据二区 |
0x1046000~0x1046FFF | 4K | 数据隔离区 |
0x1047000~0x1048FFF | 8K | 重要数据三区 |
0x1049000~0x1049FFF | 4K | 数据隔离区 |
0x105B000~0x106AFFF | 64K | 1号程序栈 |
0x106B000~0x106BFFF | 4K | 数据隔离区 |
0x107B000~0x107BFFF | 64K | 2号程序栈 |
0x107C000~0x107CFFF | 4K | 数据隔离区 |
0x107D000~0x108CFFF | 64K | 3号程序栈 |
0x108D000~0x108DFFF | 4K | 数据隔离区 |
0x108E000~0x109DFFF | 64K | 4号程序栈 |
0x109E000~0x109EFFF | 4K | 数据隔离区 |
0x109F000~0x1100000 | 388K | 预留区 |
从表1中可以看出,内存地址从0x1000000开始。前256K字节用于存储全局数据。然后依次分配给三个区域的重要数据和四个程序栈。这些数据区域之间保留4K字节的内存空间,作为数据隔离区。
常见的内存空间使用违例包括:全局数据区溢出和程序栈溢出。全局数据区是为C源程序中所有全局变量划分的一块固定内存区。全局数据区溢出是指软件编译固化时,全局变量使用的内存空间不完全在静态分配的全局数据区。程序栈溢出是指程序运行时,使用的内存空间不完全在静态分配的程序栈(C源程序编译运行时,使用的固定内存空间)。
内存空间使用违例可能导致软件运行时的状态异常变化,进而导致软件的行为与预期不符,出现软件失效。现有的内存空间使用安全分析方法很多,较为著名的包括分离逻辑、抽象解释等。与本文所述的方法相比,这些方法的算法复杂度较高,原理复杂,实现难度较大。
发明内容
本发明的技术解决问题是:克服现有技术的不足,提供了一种航天器软件内存使用安全性检查方法,可以有效的检查出可能的内存使用违例情况,避免可能因此产生的软件异常行为。
本发明的技术解决方案是:一种航天器软件空间使用安全性检查方法,包括全局数据区溢出的检查方法和程序栈溢出的检查方法,其中:
全局数据区溢出的检查方法步骤如下:
(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与内存使用划分表中的约定不相符,则报告程序栈溢出。
本发明与现有技术相比的优点在于:(1)实现简单,不需要实际运行待检查的程序,即可检查是否存在内存使用安全性问题;(2)相比于分离逻辑、抽象解释等技术,本发明方法复杂度低,更适合于大规模程序。
附图说明
图1为本发明方法的流程框图。
具体实施方式
本发明方法主要涉及两个主要部分,一部分是全局数据区溢出的检查,第二部分是程序栈溢出的检查,而两部分又均涉及到如何计算变量占用的内存区域。
如图1所示,本发明的具体实施步骤如下:
一、全局数据区溢出的检查
输入:内存使用划分表、C语言源代码、编译固化时生成的地址映射文件(mapfile)
步骤:
1、分析C语言源代码,获取所有的全局变量名及其类型;
2、分析软件编译固化时生成的mapfile,获取全局变量的首地址h;
3、对于每个全局变量,执行以下操作:
a)根据全局变量的首地址和类型,计算该全局变量占用的内存区域;计算变量占用的内存区域的方法如下:
(1)如果全局变量的类型是基本类型(整型、浮点型),则该全局变量占用的内存区域从h到(h+类型长度-1).
(2)如果全局变量的类型是除基本类型以外的其他类型,则令tmpAddr=h,对于该全局变量的每个成员,从第一个成员开始迭代计算:tmpAddr=tmpAddr+size+(tmpAddr%size),其中size是成员的类型长度。该全局变量占用的内存区域是h到(tmpAddr–1)。此步骤的作用是逐个计算每个成员占用的内存空间,导出整个全局变量占用的内存空间。需要注意的是,不能简单地将每个成员的类型长度累加,需要考虑成员的内存对齐。因此,计算步骤中需要加上(tmpAddr%size),%的含义是取余数。
b)比对内存使用划分表,如果该全局变量占用的内存区域不完全位于全局数据区,则报告全局数据区溢出。
二、程序栈溢出检查
输入:内存使用划分表、C语言源代码、程序入口函数名、编译固化时生成的地址映射文件(mapfile)
步骤:
1、分析C语言源代码,从程序入口函数开始,根据函数调用关系,对所有被调用的函数进行深度遍历,查找到所有的函数调用路径;函数调用路径是从程序入口函数开始的一个函数序列,除程序入口函数之外,该序列中的每一个函数都被它之前的函数调用,且序列中的最后一个函数不再调用其他函数;
2、对于每一个函数调用路径,通过查找mapfile,获取该函数调用路径上每一个函数运行时占用的内存空间大小。将该函数调用路径上每一个函数运行时占用的内存空间大小相加,得到该函数调用路径的内存占用空间s。对比内存使用划分表,如果s超过了分配给该程序栈的内存范围,则报告程序栈溢出。
本发明说明书中未作详细描述的内容属本领域技术人员的公知技术。
Claims (1)
1.一种航天器软件空间使用安全性检查方法,其特征在于:包括全局数据区溢出的检查方法和程序栈溢出的检查方法,其中:
全局数据区溢出的检查方法步骤如下:
(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与内存使用划分表中的约定不相符,则报告程序栈溢出。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310746198.3A CN103745153B (zh) | 2013-12-30 | 2013-12-30 | 一种航天器软件空间使用安全性检查方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310746198.3A CN103745153B (zh) | 2013-12-30 | 2013-12-30 | 一种航天器软件空间使用安全性检查方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103745153A true CN103745153A (zh) | 2014-04-23 |
CN103745153B CN103745153B (zh) | 2015-07-08 |
Family
ID=50502170
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310746198.3A Active CN103745153B (zh) | 2013-12-30 | 2013-12-30 | 一种航天器软件空间使用安全性检查方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103745153B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107015904A (zh) * | 2016-01-28 | 2017-08-04 | 中兴通讯股份有限公司 | 堆栈的保护方法及装置 |
CN108628728A (zh) * | 2017-03-15 | 2018-10-09 | 华为技术有限公司 | 检测方法和装置 |
CN108710361A (zh) * | 2018-05-30 | 2018-10-26 | 广州明珞软控信息技术有限公司 | 一种安全程序检查方法和系统 |
WO2023066233A1 (zh) * | 2021-10-18 | 2023-04-27 | 中国第一汽车股份有限公司 | 控制器的程序刷写方法、装置、控制器和存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH09293020A (ja) * | 1996-04-26 | 1997-11-11 | Oki Electric Ind Co Ltd | インターフェース回路 |
CN1920792A (zh) * | 2005-08-23 | 2007-02-28 | 中国科学院计算技术研究所 | 一种检测运行栈与静态数据区重叠的方法 |
CN103389939A (zh) * | 2013-07-03 | 2013-11-13 | 清华大学 | 一种针对堆可控分配漏洞的检测方法及系统 |
-
2013
- 2013-12-30 CN CN201310746198.3A patent/CN103745153B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH09293020A (ja) * | 1996-04-26 | 1997-11-11 | Oki Electric Ind Co Ltd | インターフェース回路 |
CN1920792A (zh) * | 2005-08-23 | 2007-02-28 | 中国科学院计算技术研究所 | 一种检测运行栈与静态数据区重叠的方法 |
CN103389939A (zh) * | 2013-07-03 | 2013-11-13 | 清华大学 | 一种针对堆可控分配漏洞的检测方法及系统 |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107015904A (zh) * | 2016-01-28 | 2017-08-04 | 中兴通讯股份有限公司 | 堆栈的保护方法及装置 |
CN107015904B (zh) * | 2016-01-28 | 2022-04-19 | 中兴通讯股份有限公司 | 堆栈的保护方法及装置 |
CN108628728A (zh) * | 2017-03-15 | 2018-10-09 | 华为技术有限公司 | 检测方法和装置 |
CN108628728B (zh) * | 2017-03-15 | 2021-07-16 | 华为技术有限公司 | 检测方法和装置 |
CN108710361A (zh) * | 2018-05-30 | 2018-10-26 | 广州明珞软控信息技术有限公司 | 一种安全程序检查方法和系统 |
CN108710361B (zh) * | 2018-05-30 | 2020-07-28 | 广州明珞软控信息技术有限公司 | 一种安全程序检查方法和系统 |
WO2023066233A1 (zh) * | 2021-10-18 | 2023-04-27 | 中国第一汽车股份有限公司 | 控制器的程序刷写方法、装置、控制器和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN103745153B (zh) | 2015-07-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103745153A (zh) | 一种航天器软件空间使用安全性检查方法 | |
CN104899147A (zh) | 一种面向安全检查的代码静态分析方法 | |
US10372584B2 (en) | Software inspection apparatus | |
US9104802B2 (en) | Stack overflow protection device, method, and related compiler and computing device | |
US9164742B2 (en) | Method and a system for searching for parts of a computer program which affects a given symbol | |
CN103778061A (zh) | 数组越界错误的自动检测和校正方法 | |
CN104573503A (zh) | 一种内存访问溢出的检测方法及装置 | |
CN107391622B (zh) | 一种数据访问方法及设备 | |
EP3171274B1 (en) | Resource leak detecting method and apparatus | |
CN104424018A (zh) | 分布式计算事务处理方法及装置 | |
CN102339298A (zh) | Sql脚本元数据的更新方法、装置及系统 | |
US20140282419A1 (en) | Software verification | |
CN104572091A (zh) | 应用软件实现方法、装置以及计算机设备 | |
CN103389939A (zh) | 一种针对堆可控分配漏洞的检测方法及系统 | |
CN104679645A (zh) | 一种栈空间余量实时检测方法 | |
US20170161035A1 (en) | Method of Adding Local Variables In Place of Global in JavaScript | |
CN103678961A (zh) | 代码动态生成的方法 | |
CN102915344A (zh) | 一种sql语句处理方法及装置 | |
CN107590020B (zh) | 一种基于差异化编码和语句签名的可信计算方法 | |
CN107491700B (zh) | 一种数据访问方法及设备 | |
CN103198244B (zh) | 保护动态链接库的方法 | |
US20160246825A1 (en) | Columnar database processing method and apparatus | |
CN107239298B (zh) | 应用程序调试方法及装置 | |
CN111163060B (zh) | 一种基于应用组的转发方法、设备以及系统 | |
CN103064410B (zh) | 一种发动机电控系统中标定数据的转换方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |