CN103745153A - 一种航天器软件空间使用安全性检查方法 - Google Patents

一种航天器软件空间使用安全性检查方法 Download PDF

Info

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
Application number
CN201310746198.3A
Other languages
English (en)
Other versions
CN103745153B (zh
Inventor
陈睿
王政
董晓刚
关小川
綦艳霞
顾斌
陈尧
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Institute of Control Engineering
Original Assignee
Beijing Institute of Control Engineering
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Institute of Control Engineering filed Critical Beijing Institute of Control Engineering
Priority to CN201310746198.3A priority Critical patent/CN103745153B/zh
Publication of CN103745153A publication Critical patent/CN103745153A/zh
Application granted granted Critical
Publication of CN103745153B publication Critical patent/CN103745153B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3644Software 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与内存使用划分表中的约定不相符,则报告程序栈溢出。
CN201310746198.3A 2013-12-30 2013-12-30 一种航天器软件空间使用安全性检查方法 Active CN103745153B (zh)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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 清华大学 一种针对堆可控分配漏洞的检测方法及系统

Patent Citations (3)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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