CN110659200A - 航空机载软件的源码和目标码对比分析方法及系统 - Google Patents
航空机载软件的源码和目标码对比分析方法及系统 Download PDFInfo
- Publication number
- CN110659200A CN110659200A CN201810697601.0A CN201810697601A CN110659200A CN 110659200 A CN110659200 A CN 110659200A CN 201810697601 A CN201810697601 A CN 201810697601A CN 110659200 A CN110659200 A CN 110659200A
- Authority
- CN
- China
- Prior art keywords
- code
- equivalence
- source
- function
- subset
- 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
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/53—Decompilation; Disassembly
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Stored Programmes (AREA)
Abstract
本发明提供了一种航空机载软件的源码和目标码对比分析方法及系统,可以对编译器产生的不可追溯至源代码的额外代码进行识别。本发明所提供的一种航空机载软件的源码和目标码对比分析方法包括以下步骤:确定用于语法特征间的等价和包含关系的通用判断准则;基于所述通用判断准则选择源文件中源代码的典型语法结构及代码子集;编译所述代码子集以生成目标文件;以及对所述目标文件反汇编以生成源码、汇编代码交叉对照列表。
Description
技术领域
本发明主要涉及航空机载软件的代码验证技术领域,尤其涉及航空机载软件的源码和目标码对比分析方法及系统。
背景技术
民用航空机载软件设计中,A级软件作为最高安全等级的软件,必须确保其安全、可靠。FAA(Federal Aviation Administration,美国联邦航空管理局)和CAAC(CivilAviation Administration of China,中国民航)均认可DO-178C即《机载系统和设备合格审定中的软件考虑》作为机载软件适航取证的标准。对于A级软件,可在源码上执行结构覆盖分析,同时“在目标码上执行额外的验证来确立编译器产生的代码序列的正确性”。该方法需要解决两个问题:1)识别由编译器产生、无法追溯到源码的目标码,称为追溯性问题;2)对于无法追溯的目标码执行额外验证,称为验证性问题。追溯性问题是在目标码中识别源码级别不可见的附加功能代码,是解决验证性问题的前提;验证性问题是证实附加目标码的正确性,是解决追溯性问题的目标。如果软件组织只需研制一个大规模的机载软件,则以上两种方法的综合分析效率都较低。
“追溯性问题”产生的根源在于目标码的结构和内容与源码略有不同,因此测试过程中基于目标码的结构覆盖与源码结构覆盖之间并不存在天然的等价关系,必须执行严格的对比分析才能确立目标码能否直接追溯到源码。
目前有两种方法支持目标码与源码的追溯性分析:①完整程序分析法——针对机载软件完整程序的所有源码和目标码,进行人工对比分析,检测编译器添加的、执行源码语句所需功能之外的任何目标码。②测试程序替代分析法——在机载软件严格遵循编码规则的约束下,编写一套足够复杂的专用测试程序,使其完整覆盖编码规则中所有语法结构和数据类型的合理组合,再以测试程序替代机载软件,执行目标码与源码的间接对比分析。
两种方法对比如下:
表1完整程序法和测试程序法分析方案对比表
现有的方法,在只需研制一个大规模的机载软件时,以上两种方法的综合分析效率都较低。
同时在现有公开技术方法中,如中国专利公开号CN104360949A公开了一种符合DO-178B/C A级软件目标码覆盖分析方法,但是其需要首先通过识别的源码目标码对应关系以及源码目标码的差异来创建编码规则表以及额外映射表,再进行目标码覆盖分析。中国专利公开号CN104461882A公开了一种符合DO-178B/C A级的模型验证方法,其是在模型验证领域中涉及从生成验证程序集选出验证程序子集的方法,此验证程序是与软件测试用例概念相对等的测试操作步骤,不是被验证的软件程序。中国专利公开号CN104731587A公开了一种单元测试数据生成方法,根据预设单元测试标准,解析被测试数据的源代码类型,并进行参数构造,在完成参数构造后,根据参数类型和参数构造的结果,生成单元测试数据。该方法可自动化生成测试单元用例输入数据,但其源码结构分析局限于对不同数据类型(仅此一类语法结构)取值范围划分等价类,基于不同数据类型的有效和无效等价类,生成相应的测试数据。
美国专利公开号US20170228309A1公开了一种通过等价关系分析,自动生成基于需求的测试例的系统,该系统包括了控制处理器、数据存储器、文本转换器、需求分类单元、等价关系分析器和边界关系分析器,其等价关系为根据需求条目的覆盖范围和数据集中变量来划分测试用例输入数据的等价类。
此外,中国专利公开号CN107391368A公开了一种航空机载软件中源代码与目标代码一致性的分析方法,其公开了步骤分析源代码,获得源代码的语言特征信息,根据语言特征信息获取源代码中在软件编译和链接过程中编译器和链接器所能用到的源代码语言典型特征,并选择多个包括典型代码特征的源代码函数;然后对目标代码进行反汇编并对反汇编代码进行分段识别标注成为函数,得到目标代码的函数清单,将所述源代码函数与所述目标代码的函数清单中的函数之间建立映射关系,并比较所述源代码函数与目标代码的函数清单中的函数是否一一对应。但该方法仅提出要选取典型结构,而未明确定义选取典型结构的可遵循原则或操作方法。
发明内容
本发明要解决的技术问题是提供一种航空机载软件的源码和目标码对比分析方法及系统,可以对编译器产生的不可追溯至源代码的额外代码进行识别。
为解决上述技术问题,本发明提供了一种航空机载软件的源码和目标码对比分析方法,包括以下步骤:确定用于语法特征间的等价和包含关系的通用判断准则;基于所述通用判断准则选择源文件中源代码的典型语法结构及代码子集;编译所述代码子集以生成目标文件;以及对所述目标文件反汇编以生成源码、汇编代码交叉对照列表。
在本发明的一实施例中,所述目标文件包含调试信息。
在本发明的一实施例中,基于所述通用判断准则选择源代码的典型语法结构及代码子集的步骤包括:获得包含语法结构的源文件结构分析表;依据所述通用判断准则,划分语法结构等价类并进行编号;以指标可量化的语法结构为关键词,对源代码中的所有函数降序排列,建立等价关系链表和包含关系链表,所述对等价关系链表和所述包含关系链表进行统一编号;以及循环处理所述包含关系链表,以选取典型语法结构和代码子集。
在本发明的一实施例中,获得包含语法结构的源文件结构分析表的步骤包括:建立多个对照表,所述多个对照表包括:函数名与源文件的对照表,构造类型与分量类型的偏序关系对照表,变量名与数据类型、存储类别的对照表,数据类型、运行控制、存储类别、运算符与所属函数的对照表;创建源文件结构分析表,在所述源文件结构分析表中为每个函数分配一个表单,为每种语法结构类型创建一个属性列,其中所述语法结构类型包括编程指标和静态分析指标;识别各函数的编程指标和静态分析指标,并录入函数所属表单的同名结构属性列中;利用所述源文件结构分析表生成完整的结构分析总表;以及将语法结构统一编号后录入到所述源文件结构分析表中。
在本发明的一实施例中,循环处理所述包含关系链表,以选取典型语法结构和代码子集的步骤包括:首先将所处理的包含关系链表中涉及的所有等价关系链表中每个等价类里的语法结构均标注为已覆盖;然后将包含关系链表中包含层级最高的等价类作为典型语法结构,如果该等价类所属等价关系链表中已有某语法结构被标注为已覆盖,结束本包含关系链表的处理;否则从该等价类中选出包含未覆盖的其他语法结构包含关系链表种类最多的函数纳入代码子集,在该函数所属源文件结构分析表中将该函数“是否选为代码子集”属性列置为“是”,同时将该函数已覆盖的节点所属等价关系链表的其他所有节点标注为已覆盖;直到所有包含关系链表已全部处理完毕;对典型代码子集外的其他函数按照包含未覆盖等价关系链表数目多少进行降序排序,将包含未覆盖的语法结构等价关系链表种类最多的函数纳入代码子集,直到所有等价类中的语法结构全部覆盖为止;以及汇总所述源文件结构分析表中“是否选为代码子集”属性列为“是”的函数,得到典型语法结构的代码子集。
在本发明的一实施例中,所述构造类型包括数组、结构体、位段、共用体。
在本发明的一实施例中,上述方法还提供对于未定义等价/包含关系准则、或不存在等价/包含关系的语法结构,直接选取为典型语法结构。
在本发明的一实施例中,上述方法包括将目标文件与调试信息格式文件进行链接以生成易于解析的目标文件。
在本发明的一实施例中,上述方法还包括呈现所述源码、汇编代码交叉对照列表用于人工分析。
本发明还提出一种航空机载软件的源码和目标码对比分析系统,包括处理器、存储器存储于所述存储器中的计算机可执行指令,其中所述处理器执行所述计算机可执行指令以实现如上所述的方法。
与现有技术相比,本发明以公式化(等价、包含关系准则)的形式定义了典型语法结构选取准则,为编程自动实现典型结构的选择打好了基础。另外,本发明可增加调试选项重新进行编译,生成含调试信息及源码目标码追溯关系的目标码,然后进行反汇编,从调试信息中提取源码、目标码对照关系,生成源码、目标码语句级交叉对照表。
附图说明
图1是根据本发明一实施例的航空机载软件的源码和目标码对比分析系统框图。
图2是根据本发明另一实施例的航空机载软件的源码和目标码对比分析系统框图。
图3根据本发明一实施例的航空机载软件的源码和目标码对比分析方法的流程图。
图4是根据本发明一实施例的选择典型语法结构及代码子集的流程图。
图5是根据本发明一实施例的获得包含语法结构的源文件结构分析表的流程图。
具体实施方式
为让本发明的上述目的、特征和优点能更明显易懂,以下结合附图对本发明的具体实施方式作详细说明。
在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是本发明还可以采用其它不同于在此描述的其它方式来实施,因此本发明不受下面公开的具体实施例的限制。
如本申请和权利要求书中所示,除非上下文明确提示例外情形,“一”、“一个”、“一种”和/或“该”等词并非特指单数,也可包括复数。一般说来,术语“包括”与“包含”仅提示包括已明确标识的步骤和元素,而这些步骤和元素不构成一个排它性的罗列,方法或者设备也可能包含其他的步骤或元素。
图1是本发明一实施例的航空机载软件的源码和目标码对比分析系统的框图。参考图1所示,航空机载软件的源码和目标码对比分析系统100可包括内部通信总线101、处理器(processor)102、只读存储器(ROM)103、随机存取存储器(RAM)104、通信端口105、输入/输出组件106、硬盘107以及用户界面108。内部通信总线101可以实现计算机100组件间的数据通信。处理器102可以进行判断和发出提示。在一些实施例中,处理器102可以由一个或多个处理器组成。通信端口105可以实现计算机100与其他部件(图中未示出)之间进行数据通信。在一些实施例中,计算机100可以通过通信端口105从网络发送和接受信息及数据。输入/输出组件106支持计算机100与其他部件之间的输入/输出数据流。用户界面108可以实现计算机100和用户之间的交互和信息交换。计算机100还可以包括不同形式的程序储存单元以及数据储存单元,例如硬盘107,只读存储器(ROM)103和随机存取存储器(RAM)104,能够存储计算机处理和/或通信使用的各种数据文件,以及处理器102所执行的可能的程序指令。
作为举例,输入/输出组件106可以包括以下的组件的一种或多种:鼠标、轨迹球、键盘、触控组件、声音接收器等。
举例来说,本申请的航空机载软件的源码和目标码对比分析方法可以实施为计算机程序,保存在硬盘107中,并可记载到处理器102中执行,以实施本申请的方法。
可以理解,本申请的源码和目标码对比分析系统并不限于由一个计算机实施,而是可以由多个联机的计算机协同实施。联机的计算机可以通过局域网或者广域网连接和通信。
例如本发明实施例的源码和目标码对比分析系统可以为源码和目标码对比分析软件,保存在硬盘中。
源码和目标码对比分析系统实施为软件时,也可以存储在计算机可读存储介质中作为制品。例如,计算机可读存储介质可以包括但不限于磁存储设备(例如,硬盘、软盘、磁条)、光盘(例如,压缩盘(CD)、数字多功能盘(DVD))、智能卡和闪存设备(例如,电可擦除可编程只读存储器(EPROM)、卡、棒、键驱动)。此外,本文描述的各种存储介质能代表用于存储信息的一个或多个设备和/或其它机器可读介质。术语“机器可读介质”可以包括但不限于能存储、包含和/或承载代码和/或指令和/或数据的无线信道和各种其它介质(和/或存储介质)。
本发明实施例的源码和目标码对比分析系统还可以实施为软件服务化(Softwareas a Service)的形态。图2是本发明另一实施例的源码和目标码对比分析系统的框图。参考图2所示,系统可包括客户机210和服务器220,二者通过网络210连接。网络210可以各种已知的有线或者无线网络,在此不再展开。服务器220和客户机210配合以实现前述实施例所描述的方法或其变化例。客户机210中可以配备用户界面、通信端口和输入组件。用户界面可以向使用者呈现各种界面,输入组件可以接收使用者的输入。服务器220中可以配置通信端口(图未示)、存储器221和处理器(图未示),存储器221存储计算机指令,处理器执行这些指令以实现方法的主要部分。处理器处理的结果通过通信端口传给客户机210,在客户机210的用户界面上显示。
可以理解,本申请的源码和目标码对比分析系统并不限于由一个服务器实施,而是可以由多个联机的服务器协同实施。联机的服务器可以通过局域网或者广域网连接和通信。
应该理解,上文所描述的实施例仅是示意。本文描述的实施例可在硬件、软件、固件、中间件、微码或者其任意组合中实现。对于硬件实现,处理单元可以在一个或者多个特定用途集成电路(ASIC)、数字信号处理器(DSP)、数字信号处理设备(DSPD)、可编程逻辑器件(PLD)、现场可编程门阵列(FPGA)、处理器、控制器、微控制器、微处理器和/或设计为执行本文所述功能的其它电子单元或者其结合内实现。
本发明的实施例针对DO-178C为A级软件定义的“验证无法追溯至源代码的附加代码”的目标,按照编程语言不同语法结构特征,提取典型特征,定义同类语法结构的等价关系准则;在等价关系准则的基础上,进一步定义了两个语法结构之间的包含关系准则。基于等价、包含关系准则,提取源代码的语法结构并划分等价类,构建等价、包含关系链表,按照约定规则从各包含关系链表中提取典型等价类结构,继而从等价类结构中选取最终的典型语法结构。将典型语法结构所在函数纳入典型代码子集,对典型代码子集重新编译生成含调试信息的目标码,使用专业工具(包括但不限于objdump)反汇编生成源码、目标码交叉对照列表。通过代码对比分析,可以找出二者差异,验证其是否影响软件功能的实现。
图3根据本发明一实施例的航空机载软件的源码和目标码对比分析方法的流程图。参考图3所示,本实施例的一种航空机载软件的源码和目标码对比分析方法,包括以下步骤:
在步骤301,确定用于语法特征间的等价和包含关系的通用判断准则。
在步骤302,基于通用判断准则选择源文件中源代码的典型语法结构及代码子集。
在步骤303,编译代码子集以生成目标文件。
在步骤304,对目标文件反汇编以生成源码、汇编代码交叉对照列表。
在本实施例中,可以基于等价、包含关系准则,提取源代码的语法结构并划分等价类,构建等价、包含关系链表,然后按照约定规则从各包含关系链表中提取典型等价类结构,继而从等价类结构中选取最终的典型语法结构。
语法结构特征包括编程指标和静态质量度量元指标(简称静态分析指标)。编程指标主要包括数据类型(如标准类型、数组/结构体/位段/共用体/指针/链表等构造类型)、存储类别(全局/局部/形参、自动/静态等)、运行控制(分支、循环、函数调用等)、表达式/运算符等与编码规则相关的微观语法结构。静态分析指标包括圈复杂度、基本复杂度、局部变量个数、参数个数、扇出数等与软件架构相关的宏观指标。
为了从大量重复的语法特征中提取有限的典型语法结构,需要定义语法特征间的等价和包含关系。如果未定义等价和包含关系,则全部程序都要作为典型结构进行分析。纳入等价和包含关系的语法结构越多,提取的典型语法结构越精炼,后续人工分析源码目标码对比关系的代码总量越少。对于等价关系,可任取其一作为典型语法结构,与其等价的语法结构视同已覆盖;对于包含关系,在编译时包含层级最高和最低者更容易引入额外代码,分别列为典型语法结构,包含链表中间的其他语法结构均视同已覆盖。未定义等价和包含关系的语法结构均应作为典型语法结构的一部分。
为了定义等价、包含关系准则,可将语法结构分为三类:
1)以数值表征的可量化语法结构,包括所有静态分析指标、函数定义中的形参/局部(自动和静态)变量个数、数组元素个数、指针层级、结构体分量个数、分支个数、同类/异类分支嵌套层级、同类/异类循环嵌套层级等,将指标数值降序排列,可得出语法结构的等价和包含关系——同一指标数值相等者定义为等价关系,数值不等者视情定义为等价或包含关系(大值包含小值;部分指标数值与CPU字长取模的余数或奇偶性相同者定义为等价关系)。为了进行将复杂语法结构与同类简单结构生成的目标码进行对比,将包含关系链表中最低层级(暂定总量<=10时)或约占10%总量的较低层级语法结构(暂定总量>10时)从包含关系链表中抽出,作为一个全新的等价类进行处理。
2)不以数值表征的非量化语法结构,如数据类型(全局/局部变量类型、结构体/共用体分量类型、函数返回值/形参类型)、运算符类型(算术/逻辑/位操作等运算符)、分支类型(if、switch…case)、循环类型(for、while、do…while)、函数调用等,通常只存在等价关系。
3)量化与非量化指标结合的语法结构,如将分支、循环类型与嵌套层级序号相结合,指定具体嵌套层级上的分支、循环类型,则可根据每一个嵌套层级上分支、循环是否等价来定义等价关系,在相应嵌套层级上分支、循环类型分别等价的前提下,根据嵌套层级数值的大小定义相应的包含关系。其他结合量化与非量化指标来定义等价、包含关系的准则类似(如结构体分量类型与分量序号相结合等)。
下面以数据结构为例,提取语法特征并定义两个语法结构A、B之间等价、包含关系的充分非必要条件如下:
表1数据结构等价和包含关系定义
C语言基本类型包括(unsigned)int,(unsigned)char,(unsigned)short,(unsigned)long,float,double等。
除数据类型外,其他语法结构如表达式(算术表达式、赋值表达式、逗号表达式、关系表达式、逻辑表达式等)、函数声明和调用、条件语句及嵌套(if语句、switch语句)、循环语句及嵌套(for循环、while循环、do…while循环)、条件/循环混合嵌套语法结构等均可参照上表1,先提取其语法特征,再分别定义等价和包含关系的充分非必要条件。
为了保证典型语法结构集合的完备性、典型结构与机载软件程序的等效性,需要基于正确、严格定义的等价/包含关系准则来选择典型语法结构。对于未定义等价/包含关系准则、或不存在等价/包含关系的相对孤立的语法结构,可以选为典型语法结构,以免遗漏掉任何实际使用频率偏低、比较冷僻的语法结构。因此,如果未定义等价和包含关系准则,则全部程序都必须作为典型语法结构进行分析;纳入等价和包含关系的语法结构越多,提取的典型语法结构越精炼,后续人工分析源码、目标码对比关系的代码总量越少。
图4是根据本发明一实施例的选择典型语法结构及代码子集的流程图。参考图4所示,流程包括如下步骤:
在步骤401,获得包含语法结构的源文件结构分析表。
在此步骤中,可以从包含源代码的源文件获得源文件结构分析表。源文件结构分析表中可包含函数、语法结构等元素。函数可具有静态分析指标和编程指标。语法结构可为如前所述的几种类型之一。
在步骤402,依据通用判断准则,划分语法结构等价类并进行编号。
在此,通用判断准则可以是前述的等价、包含准则。
在步骤403,以指标可量化的语法结构为关键词,对源代码中的所有函数降序排列,建立等价关系链表和包含关系链表。在此,对等价关系链表和包含关系链表进行统一编号。
在步骤404,循环处理包含关系链表,以选取典型语法结构和代码子集。
在此步骤中,可以首先将所处理的包含关系链表中涉及的所有等价关系链表中每个等价类里的语法结构均标注为已覆盖;然后将包含关系链表中包含层级最高的等价类作为典型语法结构,如果该等价类所属等价关系链表中已有某语法结构被标注为已覆盖,结束本包含关系链表的处理;否则从该等价类中选出包含未覆盖的其他语法结构包含关系链表种类最多的函数纳入代码子集,在该函数所属源文件结构分析表中将该函数“是否选为代码子集”属性列置为“是”,同时将该函数已覆盖的节点所属等价关系链表的其他所有节点标注为已覆盖;直到所有包含关系链表已全部处理完毕。之后,对典型代码子集外的其他函数按照包含未覆盖等价类链表数目多少进行降序排序,将包含未覆盖的语法结构等价关系链表种类最多的函数纳入代码子集,直到所有等价类中的语法结构全部覆盖为止。最后,汇总源文件结构分析表中“是否选为代码子集”属性列为“是”的函数,得到典型语法结构的代码子集。
图5是根据本发明一实施例的获得包含语法结构的源文件结构分析表的流程图。参考图5所示,获得包含语法结构的源文件结构分析表的步骤包括:
在步骤501,建立多个对照表。这些对照表包括:函数名与源文件的对照表,构造类型与分量类型的偏序关系对照表,变量名与数据类型、存储类别的对照表,数据类型、运行控制、存储类别、运算符与所属函数的对照表。
在步骤502,创建源文件结构分析表。在源文件结构分析表中可为每个函数分配一个表单,为每种语法结构类型创建一个属性列,其中语法结构类型包括编程指标和静态分析指标。
在步骤503,识别各函数的编程指标和静态分析指标,并将识别结果录入函数所属表单的同名结构属性列中。
在步骤504,利用源文件结构分析表生成完整的结构分析总表。
在步骤505,可将语法结构统一编号后录入到源文件结构分析表中。
上述的步骤303中,可以编译代码子集以生成含调试信息的目标文件。在程序编译时,编译器会从源文件中收集大量的信息,如变量名、变量类型、变量所在行号、函数名、函数参数、函数的地址范围、行号和地址的对应关系等,然后针对不同的平台,按照预定义的调试信息格式(常见的有stabs、COFF、PE-COFF、OMF、IEEE-695或DWARF)写入编译后的目标文件中。利用调试信息可实现目标程序与源程序的映射,在源码级别对程序执行情况进行控制和观察。
为了保留目标码与源码的映射关系,需要在原编译选项的基础上,增加使用“调试”编译选项(如VC使用debug模式,GCC使用“-g”),重新编译典型结构代码子集,生成含有调试信息的目标码文件。为了解决反汇编时调试信息格式的识别问题,有时需要进一步将单个目标码文件与调试信息格式文件(如dwarf.o)进行链接,生成易于解析的目标文件。
上述的步骤304中,可基于调试信息对目标程序与源程序的映射,使用专业反汇编工具(通常使用编译器提供的objdump工具)对包含调试信息的典型结构模块目标码文件执行反汇编。像源码级别调试器中源码目标码对照显示的格式一样,生成源码目标码交叉排列的列表文件(通常一条源码语句对应一组目标码语句块),作为人工执行源码目标码对比分析的输入对象。
在步骤304之后,可以呈现源码目标码交叉对比列表,针对典型结构模块集合中的函数所生成的源码目标码交叉对比列表。可以通过人工审查,逐条语句递进式检查目标码块的结构、语义与源码是否一致。如果不一致,分析原因并采取适当的手段验证这些差异是否影响函数功能的实现。
本发明的上述实施例在源码、目标码对比分析对象选取方面,提出了针对编程语言不同类型的语法结构,制定通用的语法结构等价和包含关系准则;然后通过静态分析提取机载软件源码的详细语法结构,依据等价和包含关系准则划分等价类,生成完整软件的语法结构等价和包含关系链表;从源代码语法结构等价和包含关系链表中选取典型代码结构,将典型代码结构所在的函数选为典型代码子集,作为源码、目标码对比分析的对象,该方法以公式化(等价、包含关系准则)的形式定义了典型语法结构选取准则,为编程自动实现典型结构的选择打好了基础。本发明相对201711122407.1,将典型语法结构选取从人工根据主观经验操作提升到根据语法结构特征定义等价、包含关系准则通过编程自动实现,提高了典型结构选取操作的自动化程度和选取结果的客观性、可重复性,降低了人员经验不同导致选取典型代码子集存在的较大差异。
针对选取的典型结构代码子集,本发明的实施例增加调试选项重新进行编译,生成含调试信息及源码目标码追溯关系的目标码,利用专业工具(包括但不限于objdump)进行反汇编,从调试信息中提取源码、目标码对照关系,生成源码、目标码语句级交叉对照表。该方法相对根据目标码直接反汇编,然后结合内存映射表进行人工目标码审查,建立源码、目标码函数级对照表的传统方法,一方面减少了人工建立对照表的大量工作,另一方面减少了人工分析出错的可能性。
虽然本发明已参照当前的具体实施例来描述,但是本技术领域中的普通技术人员应当认识到,以上的实施例仅是用来说明本发明,在没有脱离本发明精神的情况下还可作出各种等效的变化或替换,因此,只要在本发明的实质精神范围内对上述实施例的变化、变型都将落在本申请的权利要求书的范围内。
Claims (10)
1.一种航空机载软件的源码和目标码对比分析方法,包括以下步骤:
确定用于语法特征间的等价和包含关系的通用判断准则;
基于所述通用判断准则选择源文件中源代码的典型语法结构及代码子集;
编译所述代码子集以生成目标文件;以及
对所述目标文件反汇编以生成源码、汇编代码交叉对照列表。
2.根据权利要求1所述的方法,其特征在于,所述目标文件包含调试信息。
3.根据权利要求1所述的方法,其特征在于,基于所述通用判断准则选择源代码的典型语法结构及代码子集的步骤包括:
获得包含语法结构的源文件结构分析表;
依据所述通用判断准则,划分语法结构等价类并进行编号;
以指标可量化的语法结构为关键词,对源代码中的所有函数降序排列,建立等价关系链表和包含关系链表,所述对等价关系链表和所述包含关系链表进行统一编号;以及
循环处理所述包含关系链表,以选取典型语法结构和代码子集。
4.根据权利要求3所述的方法,其特征在于,获得包含语法结构的源文件结构分析表的步骤包括:
建立多个对照表,所述多个对照表包括:函数名与源文件的对照表,构造类型与分量类型的偏序关系对照表,变量名与数据类型、存储类别的对照表,数据类型、运行控制、存储类别、运算符与所属函数的对照表;
创建源文件结构分析表,在所述源文件结构分析表中为每个函数分配一个表单,为每种语法结构类型创建一个属性列,其中所述语法结构类型包括编程指标和静态分析指标;
识别各函数的编程指标和静态分析指标,并录入函数所属表单的同名结构属性列中;
利用所述源文件结构分析表生成完整的结构分析总表;以及
将语法结构统一编号后录入到所述源文件结构分析表中。
5.根据权利要求3所述的方法,其特征在于,循环处理所述包含关系链表,以选取典型语法结构和代码子集的步骤包括:
将包含层级最高的等价类作为典型语法结构,如果该等价类所属等价关系链表中已有某语法结构被标注为已覆盖,则将该等价类所属等价关系链表中所有语法结构均标注为已覆盖;否则从该等价类中选出包含未覆盖的其他语法结构包含关系链表种类最多的函数纳入代码子集,在该函数所属源文件结构分析表中将该函数“是否选为代码子集”属性列置为“是”,同时将该函数已覆盖的节点所属等价关系链表的其他所有节点标注为已覆盖;
对典型代码子集外的其他函数按照包含未覆盖等价关系链表数目多少进行降序排序,将包含未覆盖的语法结构等价关系链表种类最多的函数纳入代码子集,直到所有等价类中的语法结构全部覆盖为止;以及
汇总所述源文件结构分析表中“是否选为代码子集”属性列为“是”的函数,得到典型语法结构的代码子集。
6.根据权利要求4所述的方法,其特征在于,所述构造类型包括数组、结构体、位段、共用体。
7.根据权利要求4所述的方法,其特征在于,还包括对于未定义等价/包含关系准则、或不存在等价/包含关系的语法结构,直接选取为典型语法结构。
8.根据权利要求2所述的方法,其特征在于,包括将目标文件与调试信息格式文件进行链接以生成易于解析的目标文件。
9.根据权利要求1所述的方法,其特征在于,还包括呈现所述源码、汇编代码交叉对照列表用于人工分析。
10.一种航空机载软件的源码和目标码对比分析系统,包括处理器、存储器存储于所述存储器中的计算机可执行指令,其中所述处理器执行所述计算机可执行指令以实现如权利要求1-9任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810697601.0A CN110659200B (zh) | 2018-06-29 | 2018-06-29 | 航空机载软件的源码和目标码对比分析方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810697601.0A CN110659200B (zh) | 2018-06-29 | 2018-06-29 | 航空机载软件的源码和目标码对比分析方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110659200A true CN110659200A (zh) | 2020-01-07 |
CN110659200B CN110659200B (zh) | 2023-05-02 |
Family
ID=69027649
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810697601.0A Active CN110659200B (zh) | 2018-06-29 | 2018-06-29 | 航空机载软件的源码和目标码对比分析方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110659200B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111552465A (zh) * | 2020-05-12 | 2020-08-18 | 中国民航大学 | 一种p2020机器码程序到c语言源程序的溯源方法 |
CN112084785A (zh) * | 2020-07-30 | 2020-12-15 | 中国民用航空上海航空器适航审定中心 | 适航文本特征提取评估方法,系统,装置及存储介质 |
CN114741278A (zh) * | 2022-03-22 | 2022-07-12 | 华东师范大学 | 机载软件中目标代码到源代码的验证分析系统及设备 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1260055A (zh) * | 1997-06-09 | 2000-07-12 | 联信公司 | 用于提高软件安全性的模糊技术 |
US20100192128A1 (en) * | 2009-01-27 | 2010-07-29 | Honeywell International Inc. | System and methods of using test points and signal overrides in requirements-based test generation |
CN103678589A (zh) * | 2013-12-12 | 2014-03-26 | 用友软件股份有限公司 | 一种基于等价类的数据库内核查询优化方法 |
CN104391730A (zh) * | 2014-08-03 | 2015-03-04 | 浙江网新恒天软件有限公司 | 一种软件源码语言翻译系统及方法 |
CN105446723A (zh) * | 2014-09-02 | 2016-03-30 | 国际商业机器公司 | 用于标识源代码版本之间的语义区别的方法和装置 |
CN106598839A (zh) * | 2016-10-31 | 2017-04-26 | 华东师范大学 | 一种面向目标代码的程序静态分析方法 |
CN106886446A (zh) * | 2017-01-18 | 2017-06-23 | 北京航空航天大学 | 软件源代码的验证方法及装置 |
CN107391368A (zh) * | 2017-07-13 | 2017-11-24 | 中国航发控制系统研究所 | 一种航空机载软件中源代码与目标代码一致性的分析方法 |
CN107515739A (zh) * | 2016-06-16 | 2017-12-26 | 阿里巴巴集团控股有限公司 | 提高代码执行性能的方法及装置 |
-
2018
- 2018-06-29 CN CN201810697601.0A patent/CN110659200B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1260055A (zh) * | 1997-06-09 | 2000-07-12 | 联信公司 | 用于提高软件安全性的模糊技术 |
US20100192128A1 (en) * | 2009-01-27 | 2010-07-29 | Honeywell International Inc. | System and methods of using test points and signal overrides in requirements-based test generation |
CN103678589A (zh) * | 2013-12-12 | 2014-03-26 | 用友软件股份有限公司 | 一种基于等价类的数据库内核查询优化方法 |
CN104391730A (zh) * | 2014-08-03 | 2015-03-04 | 浙江网新恒天软件有限公司 | 一种软件源码语言翻译系统及方法 |
CN105446723A (zh) * | 2014-09-02 | 2016-03-30 | 国际商业机器公司 | 用于标识源代码版本之间的语义区别的方法和装置 |
CN107515739A (zh) * | 2016-06-16 | 2017-12-26 | 阿里巴巴集团控股有限公司 | 提高代码执行性能的方法及装置 |
CN106598839A (zh) * | 2016-10-31 | 2017-04-26 | 华东师范大学 | 一种面向目标代码的程序静态分析方法 |
CN106886446A (zh) * | 2017-01-18 | 2017-06-23 | 北京航空航天大学 | 软件源代码的验证方法及装置 |
CN107391368A (zh) * | 2017-07-13 | 2017-11-24 | 中国航发控制系统研究所 | 一种航空机载软件中源代码与目标代码一致性的分析方法 |
Non-Patent Citations (3)
Title |
---|
K.C. SHASHIDHAR 等: "Automatic functional verification of memory oriented global source code transformations", 《EIGHTH IEEE INTERNATIONAL HIGH-LEVEL DESIGN VALIDATION AND TEST WORKSHOP》 * |
童岳威 等: "民用飞机A级别机载软件项目源代码到目标代码追溯性分析研究", 《科技视界》 * |
蒋烈辉 等: "目标代码指令集类型识别中的特征选取", 《计算机工程与应用》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111552465A (zh) * | 2020-05-12 | 2020-08-18 | 中国民航大学 | 一种p2020机器码程序到c语言源程序的溯源方法 |
CN111552465B (zh) * | 2020-05-12 | 2022-07-05 | 中国民航大学 | 一种p2020机器码程序到c语言源程序的溯源方法 |
CN112084785A (zh) * | 2020-07-30 | 2020-12-15 | 中国民用航空上海航空器适航审定中心 | 适航文本特征提取评估方法,系统,装置及存储介质 |
CN114741278A (zh) * | 2022-03-22 | 2022-07-12 | 华东师范大学 | 机载软件中目标代码到源代码的验证分析系统及设备 |
Also Published As
Publication number | Publication date |
---|---|
CN110659200B (zh) | 2023-05-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110908640B (zh) | 实现业务功能的方法和脚本引擎 | |
JP5791698B2 (ja) | アバップソースコードのコード検査遂行システム | |
CN109189479B (zh) | 一种用于处理器指令集的并行自动化验证方法 | |
CN110059006A (zh) | 代码审计方法及装置 | |
US11442847B2 (en) | Automated determination of software testing resources | |
CN103914379A (zh) | 故障自动注入与故障检测的方法及其系统 | |
CN104461906B (zh) | 一种基于代码转换的mc/dc覆盖准则的软件测试数据生成方法 | |
JP2014053010A (ja) | 混合モードプログラムのソースコードエラー位置検出装置及び方法 | |
CN115080448B (zh) | 一种软件代码不可达路径自动检测的方法和装置 | |
CN111459500A (zh) | 基于海鹰翼辉操作系统的安全编译方法及装置 | |
CN110659200B (zh) | 航空机载软件的源码和目标码对比分析方法及系统 | |
Li et al. | Generating concise patches for newly released programming assignments | |
CN113051262B (zh) | 一种数据质检方法、装置、设备及存储介质 | |
US20180217922A1 (en) | Application testing | |
CN103049504A (zh) | 基于源代码查询的半自动插桩方法 | |
CN108563561A (zh) | 一种程序隐性约束提取方法及系统 | |
Zengler et al. | Encoding the Linux kernel configuration in propositional logic | |
CN114781330A (zh) | 一种基于需求建模的类型检查方法 | |
CN113434430A (zh) | 一种sql查询语句性能检测方法和装置 | |
Chang et al. | Validating halstead metrics for scratch program using process data | |
CN111367940A (zh) | 银行交易报表统一开发方法、客户端和服务端系统 | |
Liu et al. | FunRedisp: Reordering Function Dispatch in Smart Contract to Reduce Invocation Gas Fees | |
CN118445214B (zh) | 基于代码文件修改的测例获取方法、装置、设备、介质及产品 | |
Wei et al. | From source code analysis to static software testing | |
Maeda et al. | An Approach to Transforming Systems for Execution on Cloud Computing Systems |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |