技术文章

目标码源码追溯性分析中额外代码的确定

时间:2023-06-19

作者·常璐

引言

随着民用机载软件的不断发展,软件的复杂程度越来越高,按照RTCA/DO-178C设计保证指南进行机载软件开发已是行业规范。RTCA/DO-178C中验证过程的测试覆盖分析包括基于需求的测试覆盖分析和结构覆盖分析,其中结构覆盖分析用于确定哪些代码结构没有被基于需求的测试所执行。结构覆盖分析可以在源码、目标码、可执行目标码层级进行,无论在哪一层级开展,如果软件为A级别,并且编译器、链接器或其他方法生成了不能直接追溯到源码的额外代码,那么应该执行额外的验证以保证这些代码的正确性。
因此,对于A级别软件,如果在源码层级完成结构覆盖分析,应进行目标码源码追溯性分析,首先识别哪些目标码不能追溯到源码,之后对不能追溯到源码的代码进行额外的验证。

 

一、目标码生成

源码被汇编(用于汇编代码)或编译(用于高级语言)为目标码。源码是使用汇编语言或高级语言(如Ada、C 、C++)编写的代码,目标码即编译器或汇编器处理源代码后所生成的代码。

在将源码编译成目标码的过程中,应考虑影响最终生成目标码的因素,这些因素会影响到源码和目标码之间追溯性,包括以下几点:

  • 编译器选项:对于编译器进行不同的选项设置,可能影响编译的执行过程,进而影响最终生成的目标码;
  • 代码优化程度:代码优化能够提高目标码的执行效率,但是深层次的优化会对源码进行重构,从而使源码和目标码的追溯关系难以确定。

为了实现某些功能,某些语言的编译器可能会产生不能直接追溯到源码的目标码,为了确保编译器插入的代码不会带来安全隐患,对于在源码上执行结构覆盖的A级软件,必须处理目标码到源码的可追溯性,识别在源码层级不可见的额外功能。

 

二、目标码源码追溯性分析方法

在RTCA/DO-248C 中目标码源码追溯性分析可采用以下两种方法:

  • 对实际项目中完整目标码进行分析:对于规模相对较小的机载软件,可以将源码编译为目标码,然后通过人工分析或工具来识别出哪些目标码无法追踪到源码,并对追溯不到源码的目标码进行额外的验证以确保其正确性。
  • 对源码结构最小子集进行分析:基于代表性的程序语言结构(如加/减/乘/除/取余等结构、循环/比较等逻辑结构)按照软件编码标准的约束编写样例代码,然后使用和实际项目中同样的编译链接选项进行编译,并通过人工分析或工具来分析样例代码的目标码和源码的追溯关系。此方法相对于完整目标码分析而言,拥有可以在多个机载软件项目上复用的优势。

无论是哪种方法,进行目标码源码追溯性分析时,都需要确定是否存在无法追溯到源码的额外代码。

 

三、额外代码的确定过程

“不能直接追溯到源码”的额外代码是指引入了分支或其他作用的代码,这些分支或其他作用在源码级别上不是显而易见的。

在进行目标码到源码的追溯性分析时,如果目标码的结构等同于相应的源码,那么目标码就被认为是可直接跟踪的,意味着在源码上执行的结构覆盖分析足以通过基于需求的测试来评估目标码的覆盖。因此,当编译器添加的代码导致生成的目标码结构与源码不等同,目标码被认为是不可直接跟踪的,意味着采用同样的基于需求的测试用例,源码覆盖率可以满足,但对应的目标码中可能有代码未覆盖,未覆盖的代码就可确定为额外代码。

以下章节以一个示例介绍目标码源码追溯性分析中额外代码的确定过程。

3.1源文件编译

源码为ADA语言编写的rem_cal函数代码,实现对A和B两个有符号整型数进行取余操作。使用gcc编译器,编译选项[ -c -gnatp]对源文件*.adb进行编译,生成目标文件*.o,编译过程如下图所示:

  • -c:表示编译源文件
  • -gnatp:表示禁用语言定义的检查

3.2目标文件反汇编

由于目标文件是二进制的,机器可识别并理解但人类无法理解,因此使用gcc编译器对应的反汇编程序对目标码文件反汇编,得到含有目标码中执行区域对应的汇编指令的文件,反汇编过程如下:

3.3追溯性分析

对目标码反汇编得到的汇编指令和源码进行追溯性分析,下图左边为源码,右边为目标码中反汇编的汇编指令。

  • 红色框区域内表示B为-1时,跳转到0x18:返回值0存到%eax
  • 绿色框区域内表示B不为-1时,使用有符号除法指令,余数为%edx, 余数%edx存到%eax

通过分析发现目标码中引入了分支来处理B为-l的情况,以防止当A为(-2147483648)时可能发生溢出(Integer取值范围为[-2147483648, 2147483647],当A=-2147483648,B为-1时,A/B超过Integer的最大取值范围)。

3.4额外代码确定

当设计测试用例A为3,B为1时,源代码结构覆盖可以满足,但目标码中的以下代码并不能覆盖,因此可确定其为额外代码。

对于这些额外的代码,应该通过验证来确认它们正确地运行并且不会对机载软件引入异常行为,RTCA/DO-178C中定义了验证方法可以是评审、分析和测试。

 

总结

本文基于RTCA/DO-178C和RTCA/DO-248C标准中关于目标码源码追溯性分析的考虑,主要描述了目标码源码追溯性分析的方法及以示例说明如何确定额外代码,为机载软件研制过程A级软件满足RTCA/DO-178C 表A-7的目标“对无法追溯到源码的额外代码进行验证”提供一定的指导和帮助。

注:关于目标码源码追溯性分析活动可详细咨询上海15vip太阳成信息科技有限公司。上海15vip太阳成基于目标码源码追溯性分析方法“对源码结构最小子集进行分析”,已开发设计了 C语言程序结构样例集,可使用项目的编译链接环境直接对该样例集进行目标码源码追溯性分析。

参考文档:
RTCA/DO-178C 机载系统和设备合格审定中的软件考虑;RTCA;SC-205;2011年12月13日。
DO-248C DO-178C和DO-278A的补充信息;RTCA;SC-205;2011年12月13日

技术文章

姓名

公司

电话

邮箱