CN106886446A - 软件源代码的验证方法及装置 - Google Patents

软件源代码的验证方法及装置 Download PDF

Info

Publication number
CN106886446A
CN106886446A CN201710038189.7A CN201710038189A CN106886446A CN 106886446 A CN106886446 A CN 106886446A CN 201710038189 A CN201710038189 A CN 201710038189A CN 106886446 A CN106886446 A CN 106886446A
Authority
CN
China
Prior art keywords
function
movement
unit
source code
denotational semantics
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
CN201710038189.7A
Other languages
English (en)
Other versions
CN106886446B (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.)
Beihang University
Original Assignee
Beihang University
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 Beihang University filed Critical Beihang University
Priority to CN201710038189.7A priority Critical patent/CN106886446B/zh
Publication of CN106886446A publication Critical patent/CN106886446A/zh
Application granted granted Critical
Publication of CN106886446B publication Critical patent/CN106886446B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/425Lexical analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/436Semantic checking

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明提供一种软件源代码的验证方法及装置,方法包括:根据编程语言的语法规则,对软件源代码进行文法单元的划分,得到至少一个文法单元;基于预设的下推自动机,对每个文法单元进行识别;识别通过后,将文法单元编译为目标代码段;根据预设的专用公理集,获取文法单元对应的第一指称语义,获取目标代码段对应的第二指称语义;判断第一指称语义与第二指称语义是否一致;若第一指称语义与第二指称语义不一致,确定软件源代码存在错误。本发明解决了现有技术中当软件源代码存在错误,且当软件源代码的可执行代码的运行结果与预期结果一致时,无法发现软件源代码中的错误的问题。

Description

软件源代码的验证方法及装置
技术领域
本发明涉及计算机技术领域,尤其涉及一种软件源代码的验证方法及装置。
背景技术
编译器是计算机系统的重要系统软件之一,所有采用高级语言编写的软件源代码都必须通过编译器的编译,生成计算机能够识别的可执行代码,因此保证编译器编译过程的准确性对于整个计算机系统而言至关重要。
目前现有技术验证软件源代码准确性的主要手段是:编译器通过编译大量的软件源代码,生成可执行代码,然后运行生成的可执行代码,比较实际运行结果与预期结果是否一致来验证软件源代码的准确性。但是,这种检验软件源代码准确性的方法并不能保证软件源代码100%的正确率,软件源代码中存在的有些错误,可能并不会影响到编译后的可执行代码的运行结果,但是,这种软件源代码中所存在的错误会使软件存在漏洞,遭受网络黑客攻击的风险较高,影响到软件的安全性。
因此,为保证软件的安全性,亟需一种有效地验证软件源代码,及时且准确发现软件源代码错误的方法。
发明内容
本发明提供一种软件源代码的验证方法及装置,以解决现有技术中当软件源代码存在错误,且当软件源代码的可执行代码行结果与预期结果一致时,无法发现软件源代码中的错误的问题。
第一方面,本发明提供一种软件源代码的验证方法,包括:
根据编程语言的语法规则,对软件源代码进行文法单元的划分,得到至少一个所述文法单元;
基于预设的下推自动机,对每个文法单元进行识别;
识别通过后,将所述文法单元编译为目标代码段;
根据预设的专用公理集,获取所述文法单元对应的第一指称语义,获取所述目标代码段对应的第二指称语义;
判断所述第一指称语义与所述第二指称语义是否一致;
若所述第一指称语义与所述第二指称语义不一致,确定所述软件源代码存在错误。
可选地,所述文法单元为循环结构文法单元或非循环结构文法单元;
若所述文法单元为循环结构文法单元,相应的,所述判断所述第一指称语义与所述第二指称语义是否一致,包括:
基于循环交互证明算法,所述判断所述第一指称语义与所述第二指称语义是否一致;
若所述文法单元为非循环结构文法单元,相应的,所述判断所述第一指称语义与所述第二指称语义是否一致,包括:
基于自动推理算法,比较所述第一指称语义与所述第二指称语义是否一致。
可选地,所述判断所述第一指称语义与所述第二指称语义是否一致之后,所述方法还包括:
若所述软件源代码中的每个文法单元的所述第一指称语义与所述第二指称语义均一致,确定所述软件源代码正确;
将所述软件源代码中的每个文法单元所对应的目标代码段进行组合,得到所述软件源代码对应的目标代码。
可选地,所述预设的下推自动机包含第一动作函数,所述第一动作函数包括状态调用接口和状态返回接口;
所述状态调用接口用于跳转到所述下推自动机的第二动作函数;所述第二动作函数为所述状态调用接口对应的动作函数;
所述状态返回接口用于从所述第二动作函数返回到所述第三动作函数;所述第三动作函数为位于所述第一动作函数之后的下一个动作函数;
相应的,所述基于预设的下推自动机,对每个文法单元进行识别,包括:
将所述预设的下推自动机的第一动作函数的字符与所述文法单元的的当前字符匹配;
匹配成功后,根据所述第一动作函数状态函数的状态调用接口,跳转到所述第二动作函数,将所有第二动作函数的字符与所述当前文法单元相关联的子文法单元的所有字符进行匹配;
匹配成功后,根据所述第一动作函数的状态返回接口返回所述第三动作函数,将所述第三动作函数的字符与所述文法单元的的当前字符的下一个字符进行匹配。
可选地,所述方法还包括:当确定所述软件源代码存在错误之后,修正所述文法单元对应的软件源代码。
第二方面,本发明提供一种软件源代码的验证装置,包括:
划分模块,根据编程语言的语法规则,对软件源代码进行文法单元的划分,得到至少一个所述文法单元;
识别模块,基于预设的下推自动机,对每个文法单元进行识别;
编译模块,识别通过后,将所述文法单元编译为目标代码段;
获取模块,根据预设的专用公理集,获取所述文法单元对应的第一指称语义,获取所述目标代码段对应的第二指称语义;
判断模块,判断所述第一指称语义与所述第二指称语义是否一致;
第一确定模块,若所述第一指称语义与所述第二指称语义不一致,确定所述软件源代码存在错误。
可选地,所述文法单元为循环结构文法单元或非循环结构文法单元;
所述判断模块,具体用于当所述文法单元为循环结构文法单元时,基于循环交互证明算法,所述判断所述第一指称语义与所述第二指称语义是否一致;或当所述文法单元为非循环结构文法单元时,基于自动推理算法,比较所述第一指称语义与所述第二指称语义是否一致。
可选地,所述装置还包括:
第二确定模块,用于所述判断模块判断所述第一指称语义与所述第二指称语义是否一致之后,若所述软件源代码中的每个文法单元的所述第一指称语义与所述第二指称语义均一致,确定所述软件源代码正确;
组合模块,用于将所述软件源代码中的每个文法单元所对应的目标代码段进行组合,得到所述软件源代码对应的目标代码。
可选地,所述预设的下推自动机包含第一动作函数,所述第一动作函数包括状态调用接口和状态返回接口;所述状态调用接口用于跳转到所述下推自动机的第二动作函数;所述第二动作函数为所述状态调用接口对应的动作函数;所述状态返回接口用于从所述第二动作函数返回到所述第三动作函数;所述第三动作函数为位于所述第一动作函数之后的下一个动作函数。
所述识别模块,具体用于将所述预设的下推自动机的第一动作函数的字符与所述文法单元的的当前字符匹配;匹配成功后,根据所述第一动作函数状态函数的状态调用接口,跳转到所述第二动作函数,将所有第二动作函数的字符与所述当前文法单元相关联的子文法单元的所有字符进行匹配;匹配成功后,根据所述第一动作函数的状态返回接口返回所述第三动作函数,将所述第三动作函数的字符与所述文法单元的的当前字符的下一个字符进行匹配。
可选地,所述装置还包括:修正模块,用于当确定所述软件源代码存在错误之后,修正所述文法单元对应的软件源代码。
从本发明的实施例可知,本发明通过根据编程语言的语法规则,对软件源代码进行文法单元的划分,得到至少一个所述文法单元;基于预设的下推自动机,对每个文法单元进行识别;识别通过后,将所述文法单元编译为目标代码段;根据预设的专用公理集,获取所述文法单元对应的第一指称语义,获取所述目标代码段对应的第二指称语义;判断所述第一指称语义与所述第二指称语义是否一致;若所述第一指称语义与所述第二指称语义不一致,确定所述软件源代码存在错误。本发明解决了现有技术中当软件源代码存在错误,且当软件源代码的可执行代码的运行结果与预期结果一致时,无法发现软件源代码中的错误的问题。
附图说明
图1为一示例性实施例示出的一种软件源代码的验证方法的流程示意图;
图2为另一示例性实施例示出的一种软件源代码的验证方法的流程示意图;
图3为一示例性实施例示出的一种软件源代码的验证装置的结构示意图;
图4为另一示例性实施例示出的一种软件源代码的验证装置的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示,为一示例性实施例示出的一种软件源代码的验证方法的流程示意图,包括:
步骤101、根据编程语言的语法规则,对软件源代码进行文法单元的划分,得到至少一个文法单元。
其中,上述编程语言可以是C语言、JAVA语言等编程语言,对此本发明不作任何的限制。
其中,对软件源代码进行文法单元的划分的依据是该文法单元为软件源代码中具有独立功能的可单独编译的一段软件源代码,然后通过提取该段软件源代码中的特征字符(如,关键标识符、分隔符等),得到该段软件源代码的文法单元。
步骤102、基于预设的下推自动机,对每个文法单元进行识别。
其中,下推自动机为软件代码验证过程常用的计算模型,其主要功能是实现对软件代码的自动识别和自动编译等。
步骤103、识别通过后,将文法单元编译为目标代码段。
其中,该编译过程可以通过编译器,也可以通过下推自动机实现。
其中,目标代码段可以是中间代码(如汇编代码),也可以是其他形式的代码(如机器码),对此本发明不作任何的限制
步骤104、根据预设的专用公理集,获取文法单元对应的第一指称语义,获取目标代码段对应的第二指称语义。
其中,预设的专用公理集可以是MIPS和/或PowerPC指令集,MIPS、PowerPC指令集包含了不同的文法单元的指称语义,以及不同的目标代码段的指称语义。
步骤105、判断第一指称语义与第二指称语义是否一致。
其中,对于文法单元的类型,可采用不同的方法判断第一指称语义与第二指称语义是否一致。如根据文法单元是否为循环语句结构,采用不同的算法判断第一指称语义与第二指称语义是否一致。
步骤106、若第一指称语义与第二指称语义不一致,确定软件源代码存在错误。
从上述实施例可知,本发明通过根据编程语言的语法规则,对软件源代码进行文法单元的划分,得到至少一个文法单元;基于预设的下推自动机,对每个文法单元进行识别;识别通过后,将文法单元编译为目标代码段;根据预设的专用公理集,获取文法单元对应的第一指称语义,获取目标代码段对应的第二指称语义;判断第一指称语义与第二指称语义是否一致;若第一指称语义与第二指称语义不一致,确定软件源代码存在错误。本发明解决了现有技术中当软件源代码存在错误,且当软件源代码的可执行代码行结果与预期结果一致时,无法发现软件源代码中的错误的问题。
如图2所示,为一示例性实施例示出的一种软件源代码的验证方法的流程示意图,包括:
步骤201、根据编程语言的语法规则,对软件源代码进行文法单元的划分,得到至少一个文法单元。
步骤202、基于预设的下推自动机,对每个文法单元进行识别。
具体的,预设的下推自动机包含第一动作函数,第一动作函数包括状态调用接口和状态返回接口;状态调用接口用于跳转到下推自动机的第二动作函数;第二动作函数为状态调用接口对应的动作函数;状态返回接口用于从第二动作函数返回到第三动作函数;第三动作函数为位于第一动作函数之后的下一个动作函数;相应的,基于预设的下推自动机,对每个文法单元进行识别,包括:将预设的下推自动机的第一动作函数的字符与文法单元的的当前字符匹配;匹配成功后,根据第一动作函数状态函数的状态调用接口,跳转到第二动作函数,将所有第二动作函数的字符与当前文法单元相关联的子文法单元的所有字符进行匹配;匹配成功后,根据第一动作函数的状态返回接口返回第三动作函数,将第三动作函数的字符与文法单元的的当前字符的下一个字符进行匹配。
其中,第一动作函数被定义为:
δ(Status,*,Z0)=(<Status-Call>,Z1)
式中,*代表任意输入字符(包括空字符ε);状态调用接口<Status-Call>定义为:[Jump-Status,Return-Status],即动作函数为:δ(Status,*,Z0)=([Jump-Status,Return-Status],Z1),<Status-Call>视为新的状态:Status',即动作函数为:δ(Status,*,Z0)=(Status',Z1)。
步骤203、识别通过后,将文法单元编译为目标代码段。
关于步骤202和203的具体过程,可通过表1、表2的具体应用实施例来表示。其中,表1为文法单元1及其下推自动机、目标代码段1,表2为
为文法单元2及其下推自动机、目标代码段2。其中,表1中δ(i1,ε,()=([LogExp,i2],()为第一动作函数、δ(i2,),()=(i3,if)为第三动作函数;
表2中δ(LogExp,ε,)=([RellogExp,l0],@)为第二动作函数。
表1
表2
步骤204、根据预设的专用公理集,获取文法单元对应的第一指称语义,获取目标代码段对应的第二指称语义。
步骤205、判断第一指称语义与第二指称语义是否一致,若不一致,执行步骤206;若一致,执行步骤207。
具体的,文法单元为循环结构文法单元或非循环结构文法单元;
若文法单元为循环结构文法单元,相应的,判断第一指称语义与第二指称语义是否一致,包括:基于循环交互证明算法,判断第一指称语义与第二指称语义是否一致;
其中,循环交互证明算法的具体过程为:对循环结构文法单元设定循环次数;根据循环次数,按照预先设定的循环次数,对第一语义和第二语义进行推算,获取第一指称语义的第一推算结果,以及二指称语义的第二推算结果,判断第一推算结果与第二推算结果是否一致;
若文法单元为非循环结构文法单元,相应的,判断第一指称语义与第二指称语义是否一致,包括:
基于自动推理算法,比较第一指称语义与第二指称语义是否一致。
步骤206、确定软件源代码存在错误。
步骤207、确定软件源代码正确,将软件源代码中的每个文法单元所对应的目标代码段进行组合,得到软件源代码对应的目标代码。
从上述实施例可知,本发明通过根据编程语言的语法规则,对软件源代码进行文法单元的划分,得到至少一个文法单元;基于预设的下推自动机,对每个文法单元进行识别;识别通过后,将文法单元编译为目标代码段;根据预设的专用公理集,获取文法单元对应的第一指称语义,获取目标代码段对应的第二指称语义;判断第一指称语义与第二指称语义是否一致;若第一指称语义与第二指称语义不一致,确定软件源代码存在错误。本发明解决了现有技术中当软件源代码存在错误,且当软件源代码的可执行代码的运行结果与预期结果一致时,无法发现软件源代码中的错误的问题。同时,通过在下推自动机中设置包含状态调用接口和状态返回接口的第一动作函数,解决了传统下推自动机中对文法单元的识别和编译效率差的问题。
可选地,在上述实施例的基础上,在步骤206之后,还包括:当第一指称语义与第二指称语义不一致,确定软件源代码存在错误之后,修正文法单元对应的软件源代码。
如图3所示,为一示例性实施例示出的一种软件源代码的验证装置的结构示意图,包括:划分模块301、识别模块302、编译模块303、获取模块304、判断模块305、第一确定模块306。
其中,划分模块301,根据编程语言的语法规则,对软件源代码进行文法单元的划分,得到至少一个所述文法单元;
识别模块302,基于预设的下推自动机,对每个文法单元进行识别;
编译模块303,识别通过后,将所述文法单元编译为目标代码段;
获取模块304,根据预设的专用公理集,获取所述文法单元对应的第一指称语义,获取所述目标代码段对应的第二指称语义;
判断模块305,判断所述第一指称语义与所述第二指称语义是否一致;
第一确定模块306,若所述第一指称语义与所述第二指称语义不一致,确定所述软件源代码存在错误。
从上述实施例可知,本发明通过根据编程语言的语法规则,对软件源代码进行文法单元的划分,得到至少一个文法单元;基于预设的下推自动机,对每个文法单元进行识别;识别通过后,将文法单元编译为目标代码段;根据预设的专用公理集,获取文法单元对应的第一指称语义,获取目标代码段对应的第二指称语义;判断第一指称语义与第二指称语义是否一致;若第一指称语义与第二指称语义不一致,确定软件源代码存在错误。本发明解决了现有技术中当软件源代码存在错误,且当软件源代码的可执行代码的运行结果与预期结果一致时,无法发现软件源代码中的错误的问题。
可选地,在上述实施例的基础上,所述文法单元为循环结构文法单元或非循环结构文法单元;
所述判断模块305,具体用于当所述文法单元为循环结构文法单元时,基于循环交互证明算法,所述判断所述第一指称语义与所述第二指称语义是否一致;或当所述文法单元为非循环结构文法单元时,基于自动推理算法,比较所述第一指称语义与所述第二指称语义是否一致。
可选地,参考图4,所述装置还包括:
第二确定模块307,用于所述判断模块判断所述第一指称语义与所述第二指称语义是否一致之后,若所述软件源代码中的每个文法单元的所述第一指称语义与所述第二指称语义均一致,确定所述软件源代码正确;
组合模块308,用于将所述软件源代码中的每个文法单元所对应的目标代码段进行组合,得到所述软件源代码对应的目标代码。
可选地,所述预设的下推自动机包含第一动作函数,所述第一动作函数包括状态调用接口和状态返回接口;所述状态调用接口用于跳转到所述下推自动机的第二动作函数;所述第二动作函数为所述状态调用接口对应的动作函数;所述状态返回接口用于从所述第二动作函数返回到所述第三动作函数;所述第三动作函数为位于所述第一动作函数之后的下一个动作函数。
所述识别模块302,具体用于将所述预设的下推自动机的第一动作函数的字符与所述文法单元的的当前字符匹配;匹配成功后,根据所述第一动作函数状态函数的状态调用接口,跳转到所述第二动作函数,将所有第二动作函数的字符与所述当前文法单元相关联的子文法单元的所有字符进行匹配;匹配成功后,根据所述第一动作函数的状态返回接口返回所述第三动作函数,将所述第三动作函数的字符与所述文法单元的的当前字符的下一个字符进行匹配。
可选地,所述装置还包括:修正模块309,用于当确定所述软件源代码存在错误之后,修正所述文法单元对应的软件源代码。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。

Claims (10)

1.一种软件源代码的验证方法,其特征在于,包括:
根据编程语言的语法规则,对软件源代码进行文法单元的划分,得到至少一个所述文法单元;
基于预设的下推自动机,对每个文法单元进行识别;
识别通过后,将所述文法单元编译为目标代码段;
根据预设的专用公理集,获取所述文法单元对应的第一指称语义,获取所述目标代码段对应的第二指称语义;
判断所述第一指称语义与所述第二指称语义是否一致;
若所述第一指称语义与所述第二指称语义不一致,确定所述软件源代码存在错误。
2.根据权利要求1所述的方法,其特征在于,所述文法单元为循环结构文法单元或非循环结构文法单元;
若所述文法单元为循环结构文法单元,相应的,所述判断所述第一指称语义与所述第二指称语义是否一致,包括:
基于循环交互证明算法,所述判断所述第一指称语义与所述第二指称语义是否一致;
若所述文法单元为非循环结构文法单元,相应的,所述判断所述第一指称语义与所述第二指称语义是否一致,包括:
基于自动推理算法,比较所述第一指称语义与所述第二指称语义是否一致。
3.根据权利要求1所述的方法,其特征在于,所述判断所述第一指称语义与所述第二指称语义是否一致之后,还包括:
若所述软件源代码中的每个文法单元的所述第一指称语义与所述第二指称语义均一致,确定所述软件源代码正确;
将所述软件源代码中的每个文法单元所对应的目标代码段进行组合,得到所述软件源代码对应的目标代码。
4.根据权利要求1所述的方法,其特征在于,
所述预设的下推自动机包含第一动作函数,所述第一动作函数包括状态调用接口和状态返回接口;
所述状态调用接口用于跳转到所述下推自动机的第二动作函数;所述第二动作函数为所述状态调用接口对应的动作函数;
所述状态返回接口用于从所述第二动作函数返回到所述第三动作函数;所述第三动作函数为位于所述第一动作函数之后的下一个动作函数;
相应的,所述基于预设的下推自动机,对每个文法单元进行识别,包括:
将所述预设的下推自动机的第一动作函数的字符与所述文法单元的的当前字符匹配;
匹配成功后,根据所述第一动作函数状态函数的状态调用接口,跳转到所述第二动作函数,将所有第二动作函数的字符与所述当前文法单元相关联的子文法单元的所有字符进行匹配;
匹配成功后,根据所述第一动作函数的状态返回接口返回所述第三动作函数,将所述第三动作函数的字符与所述文法单元的的当前字符的下一个字符进行匹配。
5.根据权利要求1所述的方法,其特征在于,还包括:当确定所述软件源代码存在错误之后,修正所述文法单元对应的软件源代码。
6.一种软件源代码的验证装置,其特征在于,包括:
划分模块,根据编程语言的语法规则,对软件源代码进行文法单元的划分,得到至少一个所述文法单元;
识别模块,基于预设的下推自动机,对每个文法单元进行识别;
编译模块,识别通过后,将所述文法单元编译为目标代码段;
获取模块,根据预设的专用公理集,获取所述文法单元对应的第一指称语义,获取所述目标代码段对应的第二指称语义;
判断模块,判断所述第一指称语义与所述第二指称语义是否一致;
第一确定模块,若所述第一指称语义与所述第二指称语义不一致,确定所述软件源代码存在错误。
7.根据权利要求6所述的装置,其特征在于,所述文法单元为循环结构文法单元或非循环结构文法单元;
所述判断模块,具体用于当所述文法单元为循环结构文法单元时,基于循环交互证明算法,所述判断所述第一指称语义与所述第二指称语义是否一致;或当所述文法单元为非循环结构文法单元时,基于自动推理算法,比较所述第一指称语义与所述第二指称语义是否一致。
8.根据权利要求6所述的装置,其特征在于,还包括:
第二确定模块,用于所述判断模块判断所述第一指称语义与所述第二指称语义是否一致之后,若所述软件源代码中的每个文法单元的所述第一指称语义与所述第二指称语义均一致,确定所述软件源代码正确;
组合模块,用于将所述软件源代码中的每个文法单元所对应的目标代码段进行组合,得到所述软件源代码对应的目标代码。
9.根据权利要求6所述的装置,其特征在于,
所述预设的下推自动机包含第一动作函数,所述第一动作函数包括状态调用接口和状态返回接口;所述状态调用接口用于跳转到所述下推自动机的第二动作函数;所述第二动作函数为所述状态调用接口对应的动作函数;所述状态返回接口用于从所述第二动作函数返回到所述第三动作函数;所述第三动作函数为位于所述第一动作函数之后的下一个动作函数;
所述识别模块,具体用于将所述预设的下推自动机的第一动作函数的字符与所述文法单元的的当前字符匹配;匹配成功后,根据所述第一动作函数状态函数的状态调用接口,跳转到所述第二动作函数,将所有第二动作函数的字符与所述当前文法单元相关联的子文法单元的所有字符进行匹配;匹配成功后,根据所述第一动作函数的状态返回接口返回所述第三动作函数,将所述第三动作函数的字符与所述文法单元的的当前字符的下一个字符进行匹配。
10.根据权利要求6所述的装置,其特征在于,还包括:
修正模块,用于当确定所述软件源代码存在错误之后,修正所述文法单元对应的软件源代码。
CN201710038189.7A 2017-01-18 2017-01-18 软件源代码的验证方法及装置 Active CN106886446B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710038189.7A CN106886446B (zh) 2017-01-18 2017-01-18 软件源代码的验证方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710038189.7A CN106886446B (zh) 2017-01-18 2017-01-18 软件源代码的验证方法及装置

Publications (2)

Publication Number Publication Date
CN106886446A true CN106886446A (zh) 2017-06-23
CN106886446B CN106886446B (zh) 2020-10-23

Family

ID=59175875

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710038189.7A Active CN106886446B (zh) 2017-01-18 2017-01-18 软件源代码的验证方法及装置

Country Status (1)

Country Link
CN (1) CN106886446B (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107391368A (zh) * 2017-07-13 2017-11-24 中国航发控制系统研究所 一种航空机载软件中源代码与目标代码一致性的分析方法
CN110659200A (zh) * 2018-06-29 2020-01-07 中国航发商用航空发动机有限责任公司 航空机载软件的源码和目标码对比分析方法及系统
CN111651163A (zh) * 2020-04-29 2020-09-11 南京航空航天大学 Api指令检测方法、装置
CN113869378A (zh) * 2021-09-13 2021-12-31 四川大学 一种基于聚类与标签传播的软件系统模块划分方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04257029A (ja) * 1991-02-12 1992-09-11 Fujitsu Ltd エディタ
CN102866952A (zh) * 2012-10-11 2013-01-09 山东省科学院自动化研究所 一种基于uppaal模型的汽车软件源代码仿真测试方法
CN103679030A (zh) * 2013-12-12 2014-03-26 中国科学院信息工程研究所 一种基于动态语义特征的恶意代码分析检测方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04257029A (ja) * 1991-02-12 1992-09-11 Fujitsu Ltd エディタ
CN102866952A (zh) * 2012-10-11 2013-01-09 山东省科学院自动化研究所 一种基于uppaal模型的汽车软件源代码仿真测试方法
CN103679030A (zh) * 2013-12-12 2014-03-26 中国科学院信息工程研究所 一种基于动态语义特征的恶意代码分析检测方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
李舟军等: ""软件安全漏洞检测技术"", 《计算机学报》 *

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107391368A (zh) * 2017-07-13 2017-11-24 中国航发控制系统研究所 一种航空机载软件中源代码与目标代码一致性的分析方法
CN107391368B (zh) * 2017-07-13 2021-02-09 中国航发控制系统研究所 一种航空机载软件中源代码与目标代码一致性的分析方法
CN110659200A (zh) * 2018-06-29 2020-01-07 中国航发商用航空发动机有限责任公司 航空机载软件的源码和目标码对比分析方法及系统
CN110659200B (zh) * 2018-06-29 2023-05-02 中国航发商用航空发动机有限责任公司 航空机载软件的源码和目标码对比分析方法及系统
CN111651163A (zh) * 2020-04-29 2020-09-11 南京航空航天大学 Api指令检测方法、装置
CN111651163B (zh) * 2020-04-29 2023-05-02 南京航空航天大学 Api指令检测方法、装置
CN113869378A (zh) * 2021-09-13 2021-12-31 四川大学 一种基于聚类与标签传播的软件系统模块划分方法
CN113869378B (zh) * 2021-09-13 2023-04-07 四川大学 一种基于聚类与标签传播的软件系统模块划分方法

Also Published As

Publication number Publication date
CN106886446B (zh) 2020-10-23

Similar Documents

Publication Publication Date Title
CN106886446A (zh) 软件源代码的验证方法及装置
CN109359468B (zh) 漏洞检测方法、装置及设备
CN103019787B (zh) 函数调用关系确定方法、热补丁升级方法及装置
CN106371940A (zh) 一种程序崩溃解决方法及装置
US20190317879A1 (en) Deep learning for software defect identification
CN104021084A (zh) 一种Java源代码缺陷检测方法及装置
Morgado et al. Automated pattern-based testing of mobile applications
CN103559125B (zh) 一种利用图同构验证编译器的方法
CN111104335A (zh) 一种基于多层次分析的c语言缺陷检测方法及装置
CN103198260A (zh) 一种二进制程序漏洞自动化定位方法
CN109241737B (zh) 一种面向多种补丁模式的差异分支识别方法及系统
CN106294148A (zh) 基于扩展符号变迁系统的c语言程序软件验证方法及装置
CN103914379A (zh) 故障自动注入与故障检测的方法及其系统
CN105487983B (zh) 基于智能路径引导的敏感点逼近方法
CN111832028A (zh) 代码审计方法和装置、电子设备、及介质
CN109002723B (zh) 一种分段式符号执行方法
CN108132799B (zh) 过程间静态程序分析信息提取方法、装置及设备
CN106021110A (zh) 基于虚函数表继承关系的代码重利用攻击检测方法
CN111737120B (zh) 一种软件缺陷修复方法及装置
CN113434385A (zh) 一种针对软件模型检查工具的测试用例自动生成方法和系统
CN113688403A (zh) 一种基于符号执行验证的智能合约漏洞检测方法及装置
KR101306842B1 (ko) 자바 프로그램 검증 조건 생성 시스템 및 방법
CN105653954A (zh) 一种检测恶意代码的方法及装置
CN104199778A (zh) 测试软件注册算法错误的方法
CN105701403A (zh) 安卓应用的口令处理路径识别方法及使用该方法的装置

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