CN104714829B - 一种保证目标码和源代码一致性的编译链接方法 - Google Patents
一种保证目标码和源代码一致性的编译链接方法 Download PDFInfo
- Publication number
- CN104714829B CN104714829B CN201310690027.3A CN201310690027A CN104714829B CN 104714829 B CN104714829 B CN 104714829B CN 201310690027 A CN201310690027 A CN 201310690027A CN 104714829 B CN104714829 B CN 104714829B
- Authority
- CN
- China
- Prior art keywords
- code
- parameter
- compiling
- source code
- object code
- 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.)
- Active
Links
Landscapes
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明涉及一种保证目标码和源代码一致性的编译链接方法,充分利用源代码覆盖率测试的结果,达到目标码的全覆盖,以保障保证航空软件的安全性和可靠性。本发明定制编译参数,分析C语言基本结构及其编译所形成的目标码,证明定制的编译参数没有引入额外代码;定制链接参数,关闭代码优化功能,对源代码进行编译链接,生成目标码;目标码分析,对源代码进行模式匹配,未匹配上的部分进行目标码覆盖率测试,分析证明目标码和源代码的一致性。本发明充分利用源代码覆盖率测试的结果,达到目标码的全覆盖,以保障保证航空软件的安全性和可靠性。
Description
技术领域
本发明属于计算机编译系统领域,具体涉及一种保证目标码和源代码一致性的编译链接方法。
背景技术
传统的软件开发过程只着重于源代码的开发和覆盖率测试,但适航软件遵循的Do178B的A级标准不但要求进行源代码的覆盖率测试或分析,也要求进行目标码的覆盖率测试或分析,这是因为目标码的内容不但与源代码有关,也与编译系统及其配置参数有关,编译系统可以引入源代码并没有编写的内容到目标码,比如堆栈检查、数组越界检查等,这些额外内容是否覆盖从源代码的覆盖测试中是看不出来的,而且往往是没有构建合适的测试用例来测试这部分目标码是否有效,为了航空软件的安全可靠性考虑,A级适航认证要求能区分出这部分额外的目标码,并且通过测试或者分析的方法来证明其有效性。
另外,能形成分支的C语言结构从源代码角度和目标码角度的分支数也会有不同,从而造成源代码角度的分支全覆盖,在目标码角度却没有全覆盖。
为了达到目标码的全覆盖,可以考虑单独再做目标码的覆盖率测试,但这样的方法没有充分利用源代码覆盖率测试的结果,会造成巨大的额外工作量,而且由于目标码的非易读性,单独的分析未覆盖部分、研究增加测试用例来增加覆盖率等工作的难度也比较高。
发明内容
本发明的目的:针对传统的软件测试方法不能保证目标码和源代码最终是一致的这个问题,提供一种保证目标码和源代码一致性的编译链接方法。
本发明的技术方案:
一种保证目标码和源代码一致性的编译链接方法,其特殊之处在于:包括以下步骤:
1】定制编译参数:
1.1】在源代码编译前打开GNU编译器的参数说明文件;
1.2】分析可能会产生额外代码的编译参数,集中关闭可能会产生额外代码的编译参数;
1.3】关闭编译系统对代码的优化操作选项;
2】验证编译参数:
通过分析常用C语言基本结构及其编译所形成的目标码,验证步骤1】所定制的编译参数是否引入额外代码;如果引入,则关闭或修改相应的编译参数,如果没有引入,则无需关闭或修改,确定最终的编译参数;
3】定制链接参数;
4】验证链接参数:
关闭代码优化功能,验证所定制的链接参数没有引入额外的库文件;如果引入,则关闭或修改相应的链接参数,如果没有引入,则无需关闭或修改,确定最终的链接参数;
5】生成目标码:
根据步骤2】确定的最终的编译参数以及4】确定的最终的链接参数,对源代码进行编译链接,生成目标码;
6】对源代码进行模式匹配:
对于匹配成功的源代码,不再进行一致性分析;对于匹配不成功的源代码,通过目标码覆盖率测试,分析证明目标码和源代码的一致性。
上述步骤2还包括以下步骤:将确定的最终的编译参数写进Makefile文件。
将生成汇编文件的命令、生成.lst列表文件的命令写进Makefile文件。
上述述步骤4还包括以下步骤:将链接参数写入Makefile文件。
本发明具有的优点效果:
该发明通过对编译系统参数进行定制,可以使编译系统对源码进行编译时不产生任何的额外代码,做到目标码的可知性和确定性,通过软件覆盖率测试或者分析可以将所有的目标码都得到验证,充分利用源代码覆盖率测试的结果,达到目标码的全覆盖,以保障保证航空软件的安全性和可靠性,最大限度的保证航空软件的安全性和可靠性。
附图说明
图1是Tornado环境下的GNU编译过程。
具体实施方式
目标码覆盖率测试主要是因为目标码存在额外功能代码和分支,如果能尽量减少或预知额外代码和分支出现的位置,则能大大减少目标码覆盖率测试或分析的工作。
通过编译系统的参数定制及操作过程,尽量减少编译系统额外引入的额外代码。分析常用C语言结构所形成的目标码,分析其功能或分支与源代码的一致性,对额外代码和额外分支进行区分,集中统一的给出不一致情况下的处理方法。采用模式匹配的方法对源代码进行扫描,对大部分已证语言结构部分则无需再做目标码覆盖率测试。
该方法用于适航机载AFDX交换机软件开发和软件测试过程中,能够保证AFDX交换机软件目标码和源代码的一致性。
本发明提出了一种通过对编译系统参数定制及编译过程控制和分析常用C语言结构所形成的目标码,将大部分源代码的额外目标码数量减少到零,额外分支做出统一的分析和测试处理,从而大大减少需要做独立目标码覆盖测试的代码范围,减少工作量并提高软件的可靠性和安全性。
分析常用C语言结构所形成的目标码,分析其功能或分支与源代码的一致性,对额外代码和额外分支进行区分,集中统一的给出不一致情况下的处理方法。该部分可以采用模式匹配的方法来进行分析和处理。
编译过程控制,在编译系统进行编译的过程中为了达到执行目标码与汇编目标码的完全一致,在链接的过程中对链接过程进行严格控制,不能链接额外的库,并且把代码优化功能全部关闭。
定制编译参数:
在源代码编译前打开GNU编译器的参数说明文件,根据GNU编译器的参数说明文件,集中关闭可能会产生额外代码的参数,为了方便对目标码进行分析,将编译系统对代码的优化操作选项也关闭,列表如表1所示,通过编译系统参数定制及编译系统对源代码优化功能的关闭可以保证编译系统在对源代码编译过程中不引入额外代码,同时编译产生的目标码可读性更强。
表1编译优化选项设置
分析常用C语言结构所形成的目标码
根据Tornado环境下GNU编译器的编译过程图(图1),可以输出与C代码对应的目标码.s汇编文件,以及列出了源代码、对应的汇编目标代码、相对偏移地址、机器码等内容的.lst列表文件。从lst文件上可以分析是否有C语句功能之外的额外代码产生。
在Tornado2.2的DOS操作界面中生成汇编文件的命令行示例如下:
make usrApp.o ADDED_CFLAGS=-S
生成.lst列表文件的命令行示例如下:
make usrApp.o ADDED_CFLAGS=”-gstabs2-Wa,-ahls=$@.lst”
这些附加的编译命令和上面定制的编译参数也可以写进Makefile文件,从而一次make即能够形成与源代码对应的目标码和汇编代码、列表文件等。
对于常用的C语言结构,包括全局变量申明、堆栈变量申明、函数申明、函数调用、函数参数传递、函数返回值、函数入口和出口、if结构、while结构、for结构、switch结构、数组操作、结构体操作、枚举类型操作、指针引用、bit类型操作、逻辑操作、整形计算、嵌入汇编等内容,逐一的对生成的汇编目标码进行分析。
如if结构的示例分析:
该部分内容详见附件《目标码与源码的追踪性证明》的第3、4章,可以发现,在上述定制的编译参数下,没有额外代码产生;switch语句会产生额外分支,但可以通过增加测试用例的方法来达到目标码全覆盖。
定制链接参数
为了达到执行目标码与汇编目标码完全一致,需要在链接的时候严格控制不要链接额外的库,并且把程序优化功能关闭,如表2所示。
表2链接优化选项设置
这些链接参数同样写入到Makefile文件里面。
这样,从源代码通过定制的编译参数和链接参数,得到了最终的执行目标码,并且证明了在列举的C语言结构的应用情况下,没有额外代码产生,switch产生的额外分支可以通过case数值分析增加测试用例来达到目标码的全覆盖;从而在进行了源代码覆盖率测试后,可以考虑把符合列举的C语言结构的源代码部分不再进行目标码覆盖率测试,只对不符合列举的C语言结构的源代码部分进行独立的目标码覆盖率测试。
源代码模式匹配
为了快速区分出需要独立做目标码覆盖率测试的源代码部分,可以开发专用的模式匹配软件把已列举的C语言结构及复合结构的代码标识出来,这部分源代码不需要再做独立的目标码覆盖率测试;对switch语句也明显标识出来,并建议增加测试用例;其它未被标识的源代码则需要独立进行目标码覆盖率测试。
对于结构的简单应用,模式匹配可以快速识别出来,对于结构的嵌套应用或复合应用,模式匹配软件需要做好分析堆栈,不要丢失对最外层结构的分析跟踪;对于不能明确判断的嵌套或复合情况,可以标识出来,以便人工介入分析。
模式匹配会逐步发现不在已列举的C语言结构范围内的新型C语言结构,可以再统一作源代码与目标码的一致性分析,以扩展本发明支持的C语言结构范围。
本发明把大部分源代码的额外目标码数量减少到零,额外分支做出统一的分析和测试处理,从而大大减少需要做独立目标码覆盖测试的代码范围,通过测试和分析最终确定目标码和源代码的一致性。该发明提高目标码和源代码的一致性,以操作规程和证明方法确保源代码的覆盖率测试结果对目标码覆盖率测试同样有效,从而减少目标码覆盖率测试的工作。
Claims (4)
1.一种保证目标码和源代码一致性的编译链接方法,其特征在于:包括以下步骤:
1】定制编译参数:
1.1】在源代码编译前打开GNU编译器的参数说明文件;
1.2】分析会产生额外代码的编译参数,集中关闭会产生额外代码的编译参数;
1.3】关闭编译系统对代码的优化操作选项;
2】验证编译参数:
通过分析常用C语言基本结构及其编译所形成的目标码,验证步骤1】所定制的编译参数是否引入额外代码;如果引入,则关闭或修改相应的编译参数,如果没有引入,则无需关闭或修改,确定最终的编译参数;
3】定制链接参数;
4】验证链接参数:
关闭代码优化功能,验证所定制的链接参数没有引入额外的库文件;如果引入,则关闭或修改相应的链接参数,如果没有引入,则无需关闭或修改,确定最终的链接参数;
5】生成目标码:
根据步骤2】确定的最终的编译参数以及4】确定的最终的链接参数,对源代码进行编译链接,生成目标码;
6】对源代码进行模式匹配:
对于匹配成功的源代码,不再进行一致性分析;对于匹配不成功的源代码,通过目标码覆盖率测试,分析证明目标码和源代码的一致性。
2.根据权利要求1所述的一种保证目标码和源代码一致性的编译链接方法,其特征在于:所述步骤2还包括以下步骤:将确定的最终的编译参数写进Makefile文件。
3.根据权利要求2所述的一种保证目标码和源代码一致性的编译链接方法,其特征在于:将生成汇编文件的命令、生成.lst列表文件的命令写进Makefile文件。
4.根据权利要求3所述的一种保证目标码和源代码一致性的编译链接方法,其特征在于:所述步骤4还包括以下步骤:将链接参数写入Makefile文件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310690027.3A CN104714829B (zh) | 2013-12-15 | 2013-12-15 | 一种保证目标码和源代码一致性的编译链接方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310690027.3A CN104714829B (zh) | 2013-12-15 | 2013-12-15 | 一种保证目标码和源代码一致性的编译链接方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104714829A CN104714829A (zh) | 2015-06-17 |
CN104714829B true CN104714829B (zh) | 2017-11-28 |
Family
ID=53414199
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310690027.3A Active CN104714829B (zh) | 2013-12-15 | 2013-12-15 | 一种保证目标码和源代码一致性的编译链接方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104714829B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106293865B (zh) * | 2016-08-09 | 2019-05-31 | 中国银行股份有限公司 | 计算机源代码的编译方法及装置、认证方法、装置及系统 |
CN106611125A (zh) * | 2016-12-12 | 2017-05-03 | 中国航空工业集团公司洛阳电光设备研究所 | 一种验证编译器安全性的方法 |
CN108121285B (zh) * | 2017-12-20 | 2020-08-25 | 中国铁道科学研究院 | 基于连续功能图的应用软件协同编译方法及装置 |
US10671373B1 (en) * | 2018-12-30 | 2020-06-02 | Microsoft Technology Licensing, Llc | Mechanism for automatically incorporating software code changes into proper channels |
CN112181799A (zh) * | 2019-07-05 | 2021-01-05 | 北京新能源汽车股份有限公司 | 一种软件配置参数的测试方法、装置及汽车 |
CN114741123A (zh) * | 2022-02-11 | 2022-07-12 | 华东师范大学 | 一种机载软件形式化验证系统 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2265473C (en) * | 1996-08-30 | 2002-10-22 | Intertrust Technologies Corp. | Systems and methods for secure transaction management and electronic rights protection |
CN1677364A (zh) * | 2004-03-22 | 2005-10-05 | 国际商业机器公司 | 对代码覆盖使用硬件辅助的自主测试用例反馈的方法和设备 |
CN1856759A (zh) * | 2003-08-20 | 2006-11-01 | 麦克罗维西恩欧洲公司 | 代码扰乱以及通过仿真来控制处理器 |
EP1491999A3 (en) * | 2003-06-26 | 2007-05-23 | Microsoft Corporation | Software development infrastructure |
CN103064787A (zh) * | 2012-12-21 | 2013-04-24 | 清华大学 | 一种基于扩展接口自动机模型的嵌入式组件建模与测试方法 |
CN103440134A (zh) * | 2013-09-02 | 2013-12-11 | 电子科技大学 | 基于webkit内核的存储资源服务的本地扩展方法 |
-
2013
- 2013-12-15 CN CN201310690027.3A patent/CN104714829B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2265473C (en) * | 1996-08-30 | 2002-10-22 | Intertrust Technologies Corp. | Systems and methods for secure transaction management and electronic rights protection |
EP1491999A3 (en) * | 2003-06-26 | 2007-05-23 | Microsoft Corporation | Software development infrastructure |
CN1856759A (zh) * | 2003-08-20 | 2006-11-01 | 麦克罗维西恩欧洲公司 | 代码扰乱以及通过仿真来控制处理器 |
CN1677364A (zh) * | 2004-03-22 | 2005-10-05 | 国际商业机器公司 | 对代码覆盖使用硬件辅助的自主测试用例反馈的方法和设备 |
CN103064787A (zh) * | 2012-12-21 | 2013-04-24 | 清华大学 | 一种基于扩展接口自动机模型的嵌入式组件建模与测试方法 |
CN103440134A (zh) * | 2013-09-02 | 2013-12-11 | 电子科技大学 | 基于webkit内核的存储资源服务的本地扩展方法 |
Non-Patent Citations (1)
Title |
---|
"面向可信的航空嵌入式软件开发方法框架";牛文生 等;《北京航空航天大学学报》;20121231;第38卷(第12期);第1577-1581页 * |
Also Published As
Publication number | Publication date |
---|---|
CN104714829A (zh) | 2015-06-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104714829B (zh) | 一种保证目标码和源代码一致性的编译链接方法 | |
Kinder et al. | Jakstab: a static analysis platform for binaries: tool paper | |
Meng et al. | Binary code is not easy | |
CN101802792B (zh) | 用于测试航空器上的系统的操作软件的有效性的自动脚本生成方法及用于实现该方法的设备 | |
US8122440B1 (en) | Method and apparatus for enumerating external program code dependencies | |
CN105678169A (zh) | 一种二进制程序漏洞挖掘方法和系统 | |
CN104134039B (zh) | 病毒查杀方法、客户端、服务器以及病毒查杀系统 | |
CN103019799A (zh) | 具有指令签名支持的分布式编译处理 | |
Li et al. | Effective soundness-guided reflection analysis | |
CN104375942A (zh) | 一种面向二进制的混合模糊测试方法 | |
Lei et al. | Fast and precise handling of positive weight cycles for field-sensitive pointer analysis | |
CN105487983B (zh) | 基于智能路径引导的敏感点逼近方法 | |
Chen et al. | Cati: Context-assisted type inference from stripped binaries | |
Charif-Rubial et al. | MIL: A language to build program analysis tools through static binary instrumentation | |
Pogliani et al. | Detecting insecure code patterns in industrial robot programs | |
Li et al. | On the feasibility of automated built-in function modeling for php symbolic execution | |
Yuan et al. | End-to-end Mechanized Proof of an eBPF Virtual Machine for Micro-controllers | |
Kang et al. | Scaling javascript abstract interpretation to detect and exploit node. js taint-style vulnerability | |
CN102681932B (zh) | 一种检测软件异常输入处理正确性的方法 | |
Bandyopadhyay et al. | A path-based equivalence checking method for petri net based models of programs | |
Huchant et al. | Multi-valued expression analysis for collective checking | |
Gustafson et al. | Shimware: Toward Practical Security Retrofitting for Monolithic Firmware Images | |
Gu et al. | Vetting api usages in c programs with imchecker | |
Küster et al. | Towards explicit behavioral consistency concepts in the UML | |
CN104484266A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |