CN103092760A - 一种软件修正性在轨维护优化方法 - Google Patents
一种软件修正性在轨维护优化方法 Download PDFInfo
- Publication number
- CN103092760A CN103092760A CN2013100364323A CN201310036432A CN103092760A CN 103092760 A CN103092760 A CN 103092760A CN 2013100364323 A CN2013100364323 A CN 2013100364323A CN 201310036432 A CN201310036432 A CN 201310036432A CN 103092760 A CN103092760 A CN 103092760A
- Authority
- CN
- China
- Prior art keywords
- function
- rail
- statement
- maintenance
- 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
Landscapes
- Stored Programmes (AREA)
Abstract
一种软件修正性在轨维护优化方法,步骤为:(1)确定星上软件代码中需要实施在轨维护函数的最后一个修改点语句;(2)在所述新函数的最后一个修改点语句之后,进行恢复寄存器现场和修改所述新函数的返回地址的操作,将新函数的返回地址修改为所述需要实施在轨维护函数在其最后一个修改点语句之后的下一条语句的地址;(3)将所述新函数与原有星上软件代码进行联合编译;(4)提取联合编译之后的所述新函数对应的代码并且上注到星上用于替换所述需要实施在轨维护函数。采用本发明方法实现了软件修正性在轨维护的优化设计,可明显减少程序的注入量,降低注入程序被单粒子打翻的风险。
Description
技术领域
本发明属于星载计算机软件在轨维护技术领域,涉及一种软件修正性在轨维护优化方法。
背景技术
卫星固化于PROM中的程序不能满足任务需求,需要实施多次软件在轨维护,以进行姿态与轨道控制。
卫星姿轨控分系统AOCC应用软件采用ANSI C语言开发,以往采用ANSI C语言开发的星载软件实施在轨维护时,一般采用替换整个在轨维护函数模块的方法。这种方法生成的目标注入代码规模比较大,不利于地面操作;同时由于注入程序运行于SRAM中,规模越大,被单粒子打翻的风险越高;另外SRAM中程序的运行时间与PROM中程序的运行时间存在差异,影响软件运行时序。因此,如何减少软件在轨维护过程中程序注入的规模,是一个亟待解决的问题。
发明内容
本发明解决的技术问题是:针对现有技术的不足,对于软件修正性在轨维护,提供了一种优化方法,实现了软件修正性在轨维护过程中目标注入代码规模的减少。
本发明的技术解决方案是:
一种软件修正性在轨维护优化方法,步骤如下:
(1)确定星上软件代码中需要实施在轨维护函数的最后一个修改点语句;
(2)在所述新函数的最后一个修改点语句之后,进行恢复寄存器现场和修改所述新函数的返回地址的操作,将新函数的返回地址修改为所述需要实施在轨维护函数在其最后一个修改点语句之后的下一条语句的地址,之后进入步骤(3);
(3)将所述新函数与原有星上软件代码进行联合编译,之后进入步骤(4);
(4)提取联合编译之后的所述新函数对应的代码并且上注到星上用于替换所述需要实施在轨维护函数。
所述新函数是在所述需要实施在轨维护函数的基础上修改得到,在最后一个修改点语句之后的需要实施在轨维护函数的程序代码与将要上注的替换所述需要实施在轨维护函数的新函数在最后一个修改点语句之后的程序代码完全相同。
本发明与现有技术相比具有如下优点:
本发明可在软件修正性在轨维护模块生成注入代码时,可明显减少程序的注入量,降低注入程序被单粒子打翻的风险。
附图说明
图1为本发明流程图;
图2为在轨维护过程中窗口切换示意图。
具体实施方式
下面结合附图对本发明做进一步介绍。
本发明从减少修正性软件在轨维护生成目标注入代码的规模出发,采用复用最后一个修改点语句s之后的程序代码的方法,实现目标注入代码生成的同时,提高了PROM中固化程序代码的复用率,降低了目标注入代码的规模,优化了软件修正性在轨维护设计。
修正性在轨维护:假设函数Origin需要实施在轨维护,维护后的函数为New。New函数只在原函数Origin的基础上进行了修正性更改,与函数Origin有公共代码,即New函数与Origin函数在某条程序语句s之后的程序代码完全相同,此时的在轨维护称为修正性在轨维护。其中程序语句s称为Origin函数的最后一个修改点语句。
如图1所示,本发明提供的一种软件修正性在轨维护优化方法步骤如下:
(1)确定星上软件代码中需要实施在轨维护函数(原函数Origin)的最后一个修改点语句s;新函数(new)是在所述需要实施在轨维护函数的基础上修改得到,在最后一个修改点语句s之后的需要实施在轨维护函数的程序代码与将要上注的替换所述需要实施在轨维护函数的新函数在最后一个修改点语句s之后的程序代码完全相同,即:比较维护后的New函数与原函数Origin代码,假设New函数与Origin函数语句代码,从语句s开始至函数return结束语句完全相同;而New函数与Origin函数语句s的前一条语句不同,语句s即为Origin函数的最后一个修改点语句。
(2)在所述新函数的最后一个修改点语句之后,进行恢复寄存器现场和修改所述新函数的返回地址的操作,将新函数的返回地址修改为所述需要实施在轨维护函数在其最后一个修改点语句之后的下一条语句的地址,之后进入步骤(3);
恢复寄存器现场:由于New函数可能改变Origin函数使用的寄存器值,查看Origin函数对应的汇编语句,分析s语句执行之前的寄存器保留值,并判断相应的寄存器值是否被New函数更新。对于New函数中更新的寄存器数值,添加汇编赋值语句,恢复其保留值,并置于New函数最后一个修改点语句之后;
修改在轨维护后函数New的返回地址:通过增加修改寄存器i7的指令,将Origin函数语句s的下一条语句地址赋值给i7,假设Origin函数语句s的下一条语句地址为0x00017ffC,由于返回指令会在i7基础上加8,修改i7的地址应为0x00017ff4。这样函数结束后,即可跳转到Origin函数语句s的下一条语句继续执行。
(3)将所述新函数与原有星上软件代码进行联合编译,之后进入步骤(4);
(4)提取联合编译之后的所述新函数对应的代码并且上注到星上用于替换所述需要实施在轨维护函数。
在轨维护模块与星载固化程序联合编译后,在轨维护的基本原理:基于窗口切换的原则,每当函数中的SAVE(保存)执行时,当前函数的o寄存器就变成被调用函数的i寄存器,当前函数的栈顶sp成为被调用函数的栈底fp,SAVE切换窗口的同时,还执行了类似加法的指令操作(加一个负数),只不过它的源寄存器来源于当前窗口的sp,目标寄存器位于窗口切换之后的sp,堆栈的切换如图2所示,其中,CWP=N代表当前函数的窗口堆栈,CWP=N-1代表新函数的窗口堆栈。
如图2所示,基于上述在轨维护的基本原理,现有技术中通过如下方式注入New函数来替换原函数Origin。这种情况下,需要删除New函数中的SAVE语句,一方面,New函数不再开辟寄存器窗口,不重新分配堆栈空间,与原函数Origin共用相同的寄存器窗口和堆栈;另一方面,New的返回语句将导致寄存器窗口回退,进入New后,New的返回相当于原函数Origin的返回,原函数Origin中的后续代码不再执行。因此,为保证原有软件的功能,更动模块func0之后的所有内容,需要在注入代码New函数里重写。
对于修正性在轨维护,通常的做法是,将新增加的函数放到软件特定位置参与编译,然后提取编译后的二进制代码,删除SAVE语句,并根据实际注入地址,对其中的绝对地址跳转进行重新定位。在轨注入过程中,删除SAVE操作的前提是,保证注入模块和维护所在模块堆栈使用上不存在任何冲突。这样,注入的在轨维护程序除了更改部分内容,还需要将原函数所有内容全部包含进来,导致在轨注入代码较多。
针对此问题,本发明采取如下改善措施:
首先,保留注入代码new函数的SAVE语句,保证New函数注入代码开辟自己的窗口,在其返回时,也不对原函数Origin的窗口产生影响。
其次,增加New函数返回地址的修改,在函数返回语句之前,增加修改寄存器i7的指令,将原函数Origin调用的下一条语句地址赋值给i7。假设原函数Origin调用的下一条语句地址为0x00017ffC,由于返回指令会在i7基础上加8,所以修改i7的地址应为0x00017ff4。
这样,代码编译后,提取对应的整个二进制代码,重新定位地址即可完成注入代码的生成。这样,New函数执行完,将返回到原函数Origin继续后续程序的执行,代码注入量将明显减少。
现有技术中,问题模块或语句之前的程序无法从注入代码中省略,必须将修改点之前的代码全部包含进来。本发明不用在注入代码中重新编写修改点之后的程序,可部分减少注入量。
在轨注入代码new函数不删除SAVE语句,重定位绝对地址后,在注入代码返回前,修改i7地址为最后一个修改点对应的地址,即注入函数运行完成后,返回到原函数继续原有操作。
本发明未详细说明部分属本领域技术人员公知常识。
Claims (2)
1.一种软件修正性在轨维护优化方法,其特征在于步骤如下:
(1)确定星上软件代码中需要实施在轨维护函数的最后一个修改点语句;
(2)在所述新函数的最后一个修改点语句之后,进行恢复寄存器现场和修改所述新函数的返回地址的操作,将新函数的返回地址修改为所述需要实施在轨维护函数在其最后一个修改点语句之后的下一条语句的地址,之后进入步骤(3);
(3)将所述新函数与原有星上软件代码进行联合编译,之后进入步骤(4);
(4)提取联合编译之后的所述新函数对应的代码并且上注到星上用于替换所述需要实施在轨维护函数。
2.根据权利要求1所述的一种软件修正性在轨维护优化方法,其特征在于:所述新函数是在所述需要实施在轨维护函数的基础上修改得到,在最后一个修改点语句之后的需要实施在轨维护函数的程序代码与将要上注的替换所述需要实施在轨维护函数的新函数在最后一个修改点语句之后的程序代码完全相同。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310036432.3A CN103092760B (zh) | 2013-01-30 | 2013-01-30 | 一种软件修正性在轨维护优化方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310036432.3A CN103092760B (zh) | 2013-01-30 | 2013-01-30 | 一种软件修正性在轨维护优化方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103092760A true CN103092760A (zh) | 2013-05-08 |
CN103092760B CN103092760B (zh) | 2015-11-11 |
Family
ID=48205361
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310036432.3A Active CN103092760B (zh) | 2013-01-30 | 2013-01-30 | 一种软件修正性在轨维护优化方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103092760B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2014183557A1 (zh) * | 2013-05-14 | 2014-11-20 | 北京控制工程研究所 | 一种星敏感器在轨维护方法 |
CN105094792A (zh) * | 2014-09-25 | 2015-11-25 | 航天恒星科技有限公司 | 计算机程序注入方法及系统 |
CN105159760A (zh) * | 2014-05-27 | 2015-12-16 | 中国电信股份有限公司 | 云资源迁移方法和统一的跨平台云资源迁移能力开放接口 |
CN106020812A (zh) * | 2016-05-16 | 2016-10-12 | 北京控制工程研究所 | 一种针对dsp平台航天器软件的动态在轨维护方法 |
CN110422343A (zh) * | 2019-07-15 | 2019-11-08 | 北京控制工程研究所 | 一种卫星上姿轨控计算机的在轨维护方法 |
CN113312114A (zh) * | 2021-06-29 | 2021-08-27 | 北京微纳星空科技有限公司 | 星载软件的在轨重构方法、装置、设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1838074A (zh) * | 2006-02-22 | 2006-09-27 | 北京金山软件有限公司 | 一种64位视窗操作系统下获取函数参数的方法及系统 |
CN101826014A (zh) * | 2010-04-20 | 2010-09-08 | 北京邮电大学 | 一种软件工程源代码的分割方法 |
CN101984409A (zh) * | 2010-11-10 | 2011-03-09 | 南京南瑞继保电气有限公司 | 一种用于Linux系统测试代码注入的方法 |
CN102508657A (zh) * | 2011-10-18 | 2012-06-20 | 北京空间飞行器总体设计部 | 一种航天器嵌入式软件模块维护方法 |
-
2013
- 2013-01-30 CN CN201310036432.3A patent/CN103092760B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1838074A (zh) * | 2006-02-22 | 2006-09-27 | 北京金山软件有限公司 | 一种64位视窗操作系统下获取函数参数的方法及系统 |
CN101826014A (zh) * | 2010-04-20 | 2010-09-08 | 北京邮电大学 | 一种软件工程源代码的分割方法 |
CN101984409A (zh) * | 2010-11-10 | 2011-03-09 | 南京南瑞继保电气有限公司 | 一种用于Linux系统测试代码注入的方法 |
CN102508657A (zh) * | 2011-10-18 | 2012-06-20 | 北京空间飞行器总体设计部 | 一种航天器嵌入式软件模块维护方法 |
Non-Patent Citations (1)
Title |
---|
郭勇等: ""基于ADA语言的星载软件在轨编程技术研究"", 《电脑知识与技术》, vol. 4, no. 7, 5 December 2008 (2008-12-05), pages 1641 - 1644 * |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2014183557A1 (zh) * | 2013-05-14 | 2014-11-20 | 北京控制工程研究所 | 一种星敏感器在轨维护方法 |
CN105159760A (zh) * | 2014-05-27 | 2015-12-16 | 中国电信股份有限公司 | 云资源迁移方法和统一的跨平台云资源迁移能力开放接口 |
CN105159760B (zh) * | 2014-05-27 | 2018-11-02 | 中国电信股份有限公司 | 云资源迁移方法和统一的跨平台云资源迁移能力开放接口 |
CN105094792A (zh) * | 2014-09-25 | 2015-11-25 | 航天恒星科技有限公司 | 计算机程序注入方法及系统 |
CN106020812A (zh) * | 2016-05-16 | 2016-10-12 | 北京控制工程研究所 | 一种针对dsp平台航天器软件的动态在轨维护方法 |
CN106020812B (zh) * | 2016-05-16 | 2019-01-11 | 北京控制工程研究所 | 一种针对dsp平台航天器软件的动态在轨维护方法 |
CN110422343A (zh) * | 2019-07-15 | 2019-11-08 | 北京控制工程研究所 | 一种卫星上姿轨控计算机的在轨维护方法 |
CN110422343B (zh) * | 2019-07-15 | 2021-02-09 | 北京控制工程研究所 | 一种卫星上姿轨控计算机的在轨维护方法 |
CN113312114A (zh) * | 2021-06-29 | 2021-08-27 | 北京微纳星空科技有限公司 | 星载软件的在轨重构方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN103092760B (zh) | 2015-11-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103092760A (zh) | 一种软件修正性在轨维护优化方法 | |
CN104111848B (zh) | 一种基于异步检查点的多线程软件动态升级方法 | |
CN102156661B (zh) | 在线补丁的激活方法、装置及系统 | |
CN105205105B (zh) | 一种基于storm的数据ETL系统及处理方法 | |
Wang et al. | Uroboros: Instrumenting stripped binaries with static reassembling | |
CN101477491B (zh) | 一种统计函数运行状态的方法和装置 | |
CN101645010B (zh) | 代码自动生成系统及方法 | |
CN103942066A (zh) | 一种星载嵌入式软件模块在轨更新方法 | |
CN104484269A (zh) | 一种自动生成测试脚本的方法 | |
CN102360305B (zh) | 用于航天计算机的VxWorks操作系统裁剪定制方法 | |
CN103473067A (zh) | 嵌入式Linux分区与数据还原方法、系统及系统开发方法 | |
CN105487909B (zh) | 一种减少电力设备固件升级量的方法 | |
CN103631712B (zh) | 一种基于内存管理的模式化软件关键行为跟踪方法 | |
CN103019787A (zh) | 函数调用关系确定方法、热补丁升级方法及装置 | |
CN104391717A (zh) | 一种调试时代码动态更新方法 | |
CN101634946B (zh) | 一种rfid构件的生成方法 | |
CN102779191A (zh) | 一种MySQL数据库平滑升级的实现系统及实现方法 | |
CN106020812B (zh) | 一种针对dsp平台航天器软件的动态在轨维护方法 | |
CN109189607B (zh) | 一种应用程序断点恢复的方法 | |
CN103218551A (zh) | 一种保护java程序的方法 | |
CN104881396A (zh) | 图形化程序的编译文件形成方法 | |
CN105843659B (zh) | 一种嵌入式c编译器的实现方法及系统 | |
CN110597502B (zh) | 一种基于java实现PL/SQL语言的单步调试方法 | |
CN103559574A (zh) | 一种工作流操作方法及系统 | |
CN108491197B (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 |