一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种代码检测方法、装置、设备及存储介质与流程

2022-11-16 06:51:17 来源:中国专利 TAG:


1.本发明涉及计算机技术领域,特别涉及一种代码检测方法、装置、设备及存储介质。


背景技术:

2.随着信息技术的发展,软件在业务能力生成中发挥着越来越重要的作用。为确保软件产品质量可控,软件开发组织按照工程化的方法进行软件产品研制。其中,软件代码缺陷管理工作是软件工程中的重要内容,进行软件代码审查的主要目的是提高软件质量,及早发现软件缺陷,防止因代码缺陷而造成更大的损失。现有技术通过代码覆盖率工具对被测试代码进行覆盖率测试,在被测试代码执行异常时,根据代码覆盖率工具生成的代码覆盖信息,将被测试代码中被执行在异常时间点之前的一段时间内的代码获取为缺陷代码,测试人员不需要人工排查所有可能发生异常的代码,从而达到提高软件测试准确性和效率的效果。虽然现有技术解决了人工排查问题代码日志的工作,减缓了开发人员的部分工作量,但是需要开发人员对程序的asts(abstract syntax trees,抽象语法树)树节点或汇编指令节点逐个进行迭代分析,仍存在耗时久、编译出错时无法准确定位问题代码的问题,且asts通常保持了源代码的所有信息,其中包含的冗余信息数据量巨大,其使得检测工作量和检测成本急剧增大,而汇编节点与具体的体系架构相关,其普适性也受到一定的限制。


技术实现要素:

3.有鉴于此,本发明的目的在于提供一种代码检测方法、装置、设备和存储介质,能够提高软件检测的可靠性、代码检测速度以及开发效率,降低软件开发和维护成本。其具体方案如下:
4.第一方面,本技术公开了一种代码检测方法,包括:
5.通过预设筛选方法从待分析代码中确定缺陷代码;
6.利用预设工具提取所述缺陷代码的目标信息,并基于所述目标信息构建代码切片;
7.按照预设规则划分所述代码切片,以得到对应的组成部分;
8.对所述组成部分进行形式化抽象,以得到目标二进制信息;
9.通过预设代码安全判定标准检测所述目标二进制信息,以得到对应的检测结果,并基于所述检测结果判断所述待分析代码是否合格。
10.可选的,所述通过预设筛选方法从待分析代码中确定缺陷代码,包括:
11.将所述待分析代码转换为代码属性图;
12.对所述代码属性图进行特征选择以及量化操作,以得到目标代码属性图;
13.根据预设筛选规则筛选所述目标代码属性图,以得到所述缺陷代码。
14.可选的,所述利用预设工具提取所述缺陷代码的目标信息,并基于所述目标信息构建代码切片,包括:
15.利用预设工具并基于语法分析以及词法分析,提取所述缺陷代码的抽象语法树以及数据流信息;
16.基于所述抽象语法树以及所述数据流构建代码切片;
17.或,基于sard以及所述预设工具的代码生成所述代码切片。
18.可选的,所述按照预设规则划分所述代码切片,以得到对应的组成部分,包括:
19.按照所述代码切片与程序语句之间的执行关系划分所述代码切片,以得到对应的组成部分。
20.可选的,所述通过预设代码安全判定标准检测所述目标二进制信息之前,还包括:
21.获取具有预设类型代码安全缺陷的源程序,并标记所述源程序中缺陷源代码包含的程序语句;
22.将所述源程序编译为二进制程序;
23.通过预设应用工具获取所述二进制程序的指令寄存器执行路径,以得到对应的特征元素集合;
24.基于所述特征元素集合构建校验样本集合,并基于所述校验样本集合生成用于判断所述目标二进制信息是否存在缺陷的卷积神经网络模型。
25.可选的,所述通过预设代码安全判定标准检测所述目标二进制信息,以得到对应的检测结果,包括:
26.基于所述卷积神经网络模型建立所述预设代码安全判定标准;所述卷积神经网络模型中包含所述预设代码安全判定标准;
27.利用所述卷积神经网络模型对所述目标二进制信息进行检测,以得到第一检测结果;
28.若所述第一检测结果为所述目标二进制信息中存在缺陷,则将所述目标二进制信息翻转,并将翻转后所述目标二进制信息输入至所述卷积神经网络模型,以得到第二检测结果。
29.可选的,所述基于所述检测结果判断所述待分析代码是否合格,包括:
30.若所述第二检测结果为所述目标二进制信息中存在缺陷,则判定所述待分析代码不合格;
31.若所述第一检测结果为所述目标二进制信息中不存在缺陷,则判定所述待分析代码合格,并将所述卷积神经网络模型中的所述待分析代码删除。
32.第二方面,本技术公开了一种代码检测装置,包括:
33.缺陷代码确定模块,用于通过预设筛选方法从待分析代码中确定缺陷代码;
34.代码切片构建模块,用于利用预设工具提取所述缺陷代码的目标信息,并基于所述目标信息构建代码切片;
35.代码切片划分模块,用于按照预设规则划分所述代码切片,以得到对应的组成部分;
36.信息获取模块,用于对所述组成部分进行形式化抽象,以得到目标二进制信息;
37.代码检测模块,用于通过预设代码安全判定标准检测所述目标二进制信息,以得到对应的检测结果,并基于所述检测结果判断所述待分析代码是否合格。
38.第三方面,本技术公开了一种电子设备,包括:
39.存储器,用于保存计算机程序;
40.处理器,用于执行所述计算机程序,以实现如前述公开的代码检测方法的步骤。
41.第四方面,本技术公开了一种计算机可读存储介质,用于存储计算机程序;其中,所述计算机程序被处理器执行时实现如前述公开的代码检测方法。
42.可见,本技术提供了一种代码检测方法,包括:通过预设筛选方法从待分析代码中确定缺陷代码;利用预设工具提取所述缺陷代码的目标信息,并基于所述目标信息构建代码切片;按照预设规则划分所述代码切片,以得到对应的组成部分;对所述组成部分进行形式化抽象,以得到目标二进制信息;通过预设代码安全判定标准检测所述目标二进制信息,以得到对应的检测结果,并基于所述检测结果判断所述待分析代码是否合格。由此可见,本技术通过抽取缺陷代码的目标信息,并基于所述目标信息构建代码切片,然后进行形式化抽象,得到目标二进制信息,排除了数据量巨大的冗余信息,通过对二进制信息的检测判断代码是否合格,提高了软件检测的可靠性、代码检测速度以及开发效率,降低了软件开发和维护成本。
附图说明
43.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
44.图1为本技术公开的一种代码检测方法流程图;
45.图2为本技术公开的一种具体的代码检测方法流程图;
46.图3为本技术公开的一种代码检测方法系统框图;
47.图4为本技术公开的一种具体的代码检测方法流程图;
48.图5为本技术公开的一种具体的代码检测方法流程图;
49.图6为本技术提供的代码检测装置结构示意图;
50.图7为本技术提供的一种电子设备结构图。
具体实施方式
51.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
52.目前,现有技术解决了人工排查问题代码日志的工作,减缓了开发人员的部分工作量,但是需要开发人员对程序的asts树节点或汇编指令节点逐个进行迭代分析,仍存在耗时久、编译出错时无法准确定位问题代码的问题,且asts通常保持了源代码的所有信息,其中包含的冗余信息数据量巨大,其使得检测工作量和检测成本急剧增大,而汇编节点与具体的体系架构相关,普适性也受到一定的限制。为此,本技术提供了一种代码检测方法,能够提高软件检测的可靠性、代码检测速度以及开发效率,降低软件开发和维护成本。
53.本发明实施例公开了一种代码检测方法,参见图1所示,该方法包括:
54.步骤s11:通过预设筛选方法从待分析代码中确定缺陷代码。
55.本实施例中,通过预设筛选方法从待分析代码中确定缺陷代码。可以理解的是,首先定位缺陷代码,在一种具体的实施方式中,可以通过多轮筛选逐步缩小定位范围来确定缺陷代码;在另一种具体的实施方式中,也可以通过比对缺陷修复前后的代码进行缺陷代码的定位,从而得到更多可供检测的未知缺陷样本,并可通过版本间的代码比对弥补标准补丁文件无法获取的限制。
56.步骤s12:利用预设工具提取所述缺陷代码的目标信息,并基于所述目标信息构建代码切片。
57.本实施例中,通过预设筛选方法从待分析代码中确定缺陷代码之后,利用预设工具提取所述缺陷代码的目标信息,并基于所述目标信息构建代码切片。可以理解的是,通过预设筛选方法从待分析代码中确定缺陷代码之后,对所述缺陷代码进行预处理操作。在一种具体的实施方式中,采用开源工具joern(一个用于分析、基于c/c 项目的开源工具)在语法分析、词法分析的基础上提取所述缺陷代码的抽象语法树、数据流信息,并将所述缺陷代码的抽象语法树、数据流信息作为依据构建跨函数的代码切片。可以理解的是,joern是一个代码漏洞检查工具,用来对代码属性图进行遍历,不需要进行编译和依赖库就可以从整个项目或者单个源文件甚至函数代码片段中提取每个函数的代码属性图。在另一种具体的实施方式中,所述代码预处理可根据sard和开源软件代码可生成大量的富有数据依赖关系的代码切片数据,以增强数据集的实用性,支持多类源代码缺陷检测。
58.步骤s13:按照预设规则划分所述代码切片,以得到对应的组成部分。
59.本实施例中,基于所述目标信息构建代码切片之后,按照预设规则划分所述代码切片,以得到对应的组成部分。具体的,将所述代码切片利用程序语句之间的执行关系,划分代码特征的组成部分,以得到对应的组成部分。可以理解的是,程序语句之间的执行关系为仅当前一操作(程序段)执行完后,才能执行后继操作,例如一个顺序关系。
60.步骤s14:对所述组成部分进行形式化抽象,以得到目标二进制信息。
61.本实施例中,按照预设规则划分所述代码切片并得到对应的组成部分之后,对所述组成部分进行形式化抽象,以得到目标二进制信息。即对各组成部分进行形式化抽象,获取其中代码结构的完整二进制信息。
62.步骤s15:通过预设代码安全判定标准检测所述目标二进制信息,以得到对应的检测结果,并基于所述检测结果判断所述待分析代码是否合格。
63.本实施例中,对所述组成部分进行形式化抽象,得到目标二进制信息之后,通过预设代码安全判定标准检测所述目标二进制信息,以得到对应的检测结果,并基于所述检测结果判断所述待分析代码是否合格。即进行缺陷检测操作,具体的,依据卷积神经网络模型中信息建立二进制代码安全缺陷的判定标准,对代码进行检测。
64.由于在现有技术中需要对程序的asts树节点或汇编指令节点逐个进行迭代分析,且asts通常保持了源代码的所有信息,耗时较长并且包含的冗余信息数据量巨大,使得检测工作量和检测成本急剧增大。因此提出本方案解决上述缺陷,具体流程如图2所示,定位缺陷代码;代码预处理;样本数据表征;利用卷积神经网络模型进行缺陷检测,若检测合格则结束,若检测不合格则再次进入代码预处理的步骤。
65.进一步的,如图3所示的系统框图,本系统包括数据层、业务支撑层、业务逻辑层和
显示层。可以理解的是,所述数据层用于存储系统运行所需的数据,包括缺陷数据库和系统运行数据库,采用sql(structured query language,结构化查询语言)server(服务)数据库构建;所述业务支持层用于对业务活动的实现提供支持,由网络链路通信引擎、数据访问引擎、数据库引擎、报表生成引擎构成;所述业务逻辑层用于按照业务逻辑规则实现业务功能;所述显示层用于通过人机交互界面可视化处理系统各项数据,包括数据地址的配置、业务参数的配置、查询跟踪和态势分析结果的报表导出。所述缺陷数据库用于存储缺陷代码及其跟踪数据,包括缺陷条目及其属性、缺陷状态变化及缺陷处理流程流转记录的数据;所述系统运行数据库用于存储支撑系统运行的数据,包括数据地址配置记录、业务参数配置记录及系统运行日志的数据。所述网络链路通信引擎使用tcp(transmission control protocol,一种通信协议)协议实现客户端与服务器端通过以太网进行通信;所述数据访问引擎用于对测试结果原始记录数据的访问。当第三方调度引擎从配置管理库中检出代码进行编译和测试后,基于原始的测试记录生成软件缺陷报告或更新软件代码缺陷属性,并通知相应负责人处理后,相应任务后会触发软件代码缺陷属性的更新以及自动流转并通知相应负责人处理,在软件代码缺陷管理系统中进行缺陷数据的跟踪和分析。
66.可见,本技术提供了一种代码检测方法,包括:通过预设筛选方法从待分析代码中确定缺陷代码;利用预设工具提取所述缺陷代码的目标信息,并基于所述目标信息构建代码切片;按照预设规则划分所述代码切片,以得到对应的组成部分;对所述组成部分进行形式化抽象,以得到目标二进制信息;通过预设代码安全判定标准检测所述目标二进制信息,以得到对应的检测结果,并基于所述检测结果判断所述待分析代码是否合格。由此可见,本技术通过抽取缺陷代码的目标信息,并基于所述目标信息构建代码切片,然后进行形式化抽象,得到目标二进制信息,排除了数据量巨大的冗余信息,通过对二进制信息的检测判断代码是否合格,提高了软件检测的可靠性、代码检测速度以及开发效率,降低了软件开发和维护成本。
67.参见图4所示,本发明实施例公开了一种代码检测方法,相对于上一实施例,本实施例对技术方案作了进一步的说明和优化。
68.步骤s21:将所述待分析代码转换为代码属性图。
69.本实施例中,首先定位缺陷代码。具体的,将待分析的代码转换为代码属性图的形式,并以函数为单位。可以理解的是,代码属性图是结合抽象语法树、控制流图、数据流图而形成的新的一种图示结构,用于在一张图中综合表示程序的运行过程,数据传递过程等。
70.步骤s22:对所述代码属性图进行特征选择以及量化操作,以得到目标代码属性图。
71.本实施例中,将所述待分析代码转换为代码属性图之后,对所述代码属性图进行特征选择以及量化操作,以得到目标代码属性图。可以理解的是,所述待分析代码转换得到的代码属性图进行一定的选择量化操作之后,对得到的目标代码属性图进行后续的筛选步骤。
72.步骤s23:根据预设筛选规则筛选所述目标代码属性图,以得到所述缺陷代码。
73.本实施例中,对所述代码属性图进行特征选择以及量化操作,得到目标代码属性图之后,根据预设筛选规则筛选所述目标代码属性图,以得到所述缺陷代码。可以理解的是,对所述目标代码属性图进行多轮筛选,逐步缩小定位范围至确定缺陷代码。
74.步骤s24:利用预设工具提取所述缺陷代码的目标信息,并基于所述目标信息构建代码切片。
75.本实施例中,定位到缺陷代码之后,进行样本数据表征操作,即利用预设工具提取所述缺陷代码的目标信息,并基于所述目标信息构建代码切片。在一种具体的实施方式中,利用预设工具并基于语法分析以及词法分析,提取所述缺陷代码的抽象语法树以及数据流信息,然后基于所述抽象语法树以及所述数据流构建代码切片。在另一种具体的实施方式中,基于sard以及所述预设工具的代码生成所述代码切片,具体的,根据sard和开源软件(例如joern)代码可生成大量的富有数据依赖关系的代码切片数据,增强数据集的实用性,支持多类源代码缺陷检测。
76.进一步的,所述样本数据表征操作包括建立源代码元素集合;将源程序编译为二进制程序,应用工具vts(vendor test suite,供应商测试套件)获取所述二进制程序的ir(intermediate representation,指令集)执行路径;建立ir代码元素集合,并构建校验样本集合;构建特征元素集合后,生成二进制代码安全缺陷的卷积神经网络模型。
77.步骤s25:按照所述代码切片与程序语句之间的执行关系划分所述代码切片,以得到对应的组成部分。
78.步骤s26:对所述组成部分进行形式化抽象,以得到目标二进制信息。
79.步骤s27:通过预设代码安全判定标准检测所述目标二进制信息,以得到对应的检测结果,并基于所述检测结果判断所述待分析代码是否合格。
80.关于上述步骤s25至s27的具体内容可以参考前述实施例中公开的相应内容,在此不再进行赘述。
81.可见,本技术实施例通过将所述待分析代码转换为代码属性图;对所述代码属性图进行特征选择以及量化操作,以得到目标代码属性图;根据预设筛选规则筛选所述目标代码属性图,以得到所述缺陷代码;利用预设工具提取所述缺陷代码的目标信息,并基于所述目标信息构建代码切片;按照所述代码切片与程序语句之间的执行关系划分所述代码切片,以得到对应的组成部分;对所述组成部分进行形式化抽象,以得到目标二进制信息;通过预设代码安全判定标准检测所述目标二进制信息,以得到对应的检测结果,并基于所述检测结果判断所述待分析代码是否合格,提高了软件检测的可靠性、代码检测速度以及开发效率,降低了软件开发和维护成本。
82.参见图5所示,本发明实施例公开了一种代码检测方法,相对于上一实施例,本实施例对技术方案作了进一步的说明和优化。
83.步骤s31:通过预设筛选方法从待分析代码中确定缺陷代码。
84.步骤s32:利用预设工具提取所述缺陷代码的目标信息,并基于所述目标信息构建代码切片。
85.步骤s33:按照预设规则划分所述代码切片,以得到对应的组成部分。
86.步骤s34:对所述组成部分进行形式化抽象,以得到目标二进制信息。
87.步骤s35:获取具有预设类型代码安全缺陷的源程序,并标记所述源程序中缺陷源代码包含的程序语句。
88.本实施例中,对所述组成部分进行形式化抽象,得到目标二进制信息之后,获取具有预设类型代码安全缺陷的源程序,并标记所述源程序中缺陷源代码包含的程序语句。可
以理解的是,由于ir语句与机器指令之间一一对应且语义相同,所以上述过程获取的结构特征信息准确地描述了二进制代码安全缺陷的具体存在形式,能够作为检测二进制程序中代码安全缺陷的有效依据。
89.具体的,建立源代码元素集合。建立源代码元素集合为获取具有特定类型代码安全缺陷的源程序,选择出有代表性的源程序,并标记其中缺陷源代码所包含的程序语句,将其表示为向量形式。
90.步骤s36:将所述源程序编译为二进制程序。
91.本实施例中,获取具有预设类型代码安全缺陷的源程序,并标记所述源程序中缺陷源代码包含的程序语句之后,将所述源程序编译为二进制程序。
92.步骤s37:通过预设应用工具获取所述二进制程序的指令寄存器执行路径,以得到对应的特征元素集合。
93.本实施例中,将所述源程序编译为二进制程序之后,通过预设应用工具获取所述二进制程序的指令寄存器执行路径,以得到对应的特征元素集合。例如通过应用工具vts获取二进制程序的ir执行路径。
94.步骤s38:基于所述特征元素集合构建校验样本集合,并基于所述校验样本集合生成用于判断所述目标二进制信息是否存在缺陷的卷积神经网络模型。
95.本实施例中,通过预设应用工具获取所述二进制程序的指令寄存器执行路径,得到对应的特征元素集合之后,基于所述特征元素集合构建校验样本集合,并基于所述校验样本集合生成用于判断所述目标二进制信息是否存在缺陷的卷积神经网络模型。即建立ir代码元素集合,并构建校验样本集合。可以理解的是,构建所述校验样本集合后,生成二进制代码安全缺陷的卷积神经网络模型。
96.步骤s39:通过预设代码安全判定标准检测所述目标二进制信息,以得到对应的检测结果。
97.本实施例中,通过预设代码安全判定标准检测所述目标二进制信息,以得到对应的检测结果。具体的,基于所述卷积神经网络模型建立所述预设代码安全判定标准;所述卷积神经网络模型中包含所述预设代码安全判定标准;利用所述卷积神经网络模型对所述目标二进制信息进行检测,以得到第一检测结果;若所述第一检测结果为所述目标二进制信息中存在缺陷,则将所述目标二进制信息翻转,并将翻转后所述目标二进制信息输入至所述卷积神经网络模型,以得到第二检测结果。例如,基于卷积神经网络模型中信息建立二进制代码安全缺陷的判定标准,对代码进行检测;若代码存在缺陷部位,则对其相关数据实施翻转后,再导入卷积神经网络模型中进行判断。卷积神经网络模型的判定方法是以误差平方和为目标函数的前馈神经网络,对于每一个输入模式x,其运算公式如下:
[0098][0099]
其中,将公式中的各项字母进行赋值,x表示数据代码的期望输出值与实际输出值的误差平方和,将输出单元的数值设置为a,ma、na对应输出模式中的第a个单元的目标值(ma)与实际值(na);若数据代码小于实际值则判定为数据代码为缺陷代码。
[0100]
步骤s310:基于所述检测结果判断所述待分析代码是否合格。
[0101]
本实施例中,基于所述检测结果判断所述待分析代码是否合格。若所述第二检测
结果为所述目标二进制信息中存在缺陷,则判定所述待分析代码不合格;若所述第一检测结果为所述目标二进制信息中不存在缺陷,则判定所述待分析代码合格,并将所述卷积神经网络模型中的所述待分析代码删除。例如若代码存在缺陷部位,则对其相关数据实施翻转后,再导入卷积神经网络模型中进行判断;若二次判断仍存在缺陷部位,则判定为不合格;若代码未存在缺陷部位,则将其从卷积神经网络模型中排除。
[0102]
可以理解的是,通过缺陷的源代码元素集合生成特征元素集合,抽取代码结构信息,并构建判定用的卷积神经网络模型,无需通过汇编指令节点逐个进行迭代分析,排除了数据量巨大的冗余信息,通过ir代码与二进制代码的转换关系,实现对二进制程序中代码安全缺陷的有效检测,提高了软件检测的可靠性、可维护性和可理解性,降低软件开发的成本,在提升代码检测速度的同时提高开发效率,减少了软件开发和维护成本。
[0103]
关于上述步骤s31至s34的具体内容可以参考前述实施例中公开的相应内容,在此不再进行赘述。
[0104]
可见,本技术实施例通过预设筛选方法从待分析代码中确定缺陷代码;利用预设工具提取所述缺陷代码的目标信息,并基于所述目标信息构建代码切片;按照预设规则划分所述代码切片,以得到对应的组成部分;对所述组成部分进行形式化抽象,以得到目标二进制信息;获取具有预设类型代码安全缺陷的源程序,并标记所述源程序中缺陷源代码包含的程序语句;将所述源程序编译为二进制程序;通过预设应用工具获取所述二进制程序的指令寄存器执行路径,以得到对应的特征元素集合;基于所述特征元素集合构建校验样本集合,并基于所述校验样本集合生成用于判断所述目标二进制信息是否存在缺陷的卷积神经网络模型;通过预设代码安全判定标准检测所述目标二进制信息,以得到对应的检测结果;基于所述检测结果判断所述待分析代码是否合格,提高了软件检测的可靠性、代码检测速度以及开发效率,降低了软件开发和维护成本。
[0105]
参见图6所示,本技术实施例还相应公开了一种代码检测装置,包括:
[0106]
缺陷代码确定模块11,用于通过预设筛选方法从待分析代码中确定缺陷代码;
[0107]
代码切片构建模块12,用于利用预设工具提取所述缺陷代码的目标信息,并基于所述目标信息构建代码切片;
[0108]
代码切片划分模块13,用于按照预设规则划分所述代码切片,以得到对应的组成部分;
[0109]
信息获取模块14,用于对所述组成部分进行形式化抽象,以得到目标二进制信息;
[0110]
代码检测模块15,用于通过预设代码安全判定标准检测所述目标二进制信息,以得到对应的检测结果,并基于所述检测结果判断所述待分析代码是否合格。
[0111]
可见,本技术包括:通过预设筛选方法从待分析代码中确定缺陷代码;利用预设工具提取所述缺陷代码的目标信息,并基于所述目标信息构建代码切片;按照预设规则划分所述代码切片,以得到对应的组成部分;对所述组成部分进行形式化抽象,以得到目标二进制信息;通过预设代码安全判定标准检测所述目标二进制信息,以得到对应的检测结果,并基于所述检测结果判断所述待分析代码是否合格。由此可见,本技术通过抽取缺陷代码的目标信息,并基于所述目标信息构建代码切片,然后进行形式化抽象,得到目标二进制信息,排除了数据量巨大的冗余信息,通过对二进制信息的检测判断代码是否合格,提高了软件检测的可靠性、代码检测速度以及开发效率,降低了软件开发和维护成本。
[0112]
在一些具体实施例中,所述缺陷代码确定模块11,具体包括:
[0113]
待分析代码转换单元,用于将所述待分析代码转换为代码属性图;
[0114]
目标代码属性图获取单元,用于对所述代码属性图进行特征选择以及量化操作,以得到目标代码属性图;
[0115]
缺陷代码获取单元,用于根据预设筛选规则筛选所述目标代码属性图,以得到所述缺陷代码。
[0116]
在一些具体实施例中,所述代码切片构建模块12,具体包括:
[0117]
信息提取单元,用于利用预设工具并基于语法分析以及词法分析,提取所述缺陷代码的抽象语法树以及数据流信息;
[0118]
第一代码切片生成单元,用于基于所述抽象语法树以及所述数据流构建代码切片;
[0119]
第二代码切片生成单元,用于基于sard以及所述预设工具的代码生成所述代码切片。
[0120]
在一些具体实施例中,所述代码切片划分模块13,具体包括:
[0121]
代码切片划分单元,用于按照所述代码切片与程序语句之间的执行关系划分所述代码切片,以得到对应的组成部分。
[0122]
在一些具体实施例中,所述信息获取模块14,具体包括:
[0123]
目标二进制信息获取单元,用于对所述组成部分进行形式化抽象,以得到目标二进制信息。
[0124]
在一些具体实施例中,所述代码检测模块15,具体包括:
[0125]
源程序获取单元,用于获取具有预设类型代码安全缺陷的源程序,并标记所述源程序中缺陷源代码包含的程序语句;
[0126]
源程序编译单元,用于将所述源程序编译为二进制程序;
[0127]
特征元素集合获取单元,用于通过预设应用工具获取所述二进制程序的指令寄存器执行路径,以得到对应的特征元素集合;
[0128]
卷积神经网络模型生成单元,用于基于所述特征元素集合构建校验样本集合,并基于所述校验样本集合生成用于判断所述目标二进制信息是否存在缺陷的卷积神经网络模型;
[0129]
预设代码安全判定标准建立单元,用于基于所述卷积神经网络模型建立所述预设代码安全判定标准;所述卷积神经网络模型中包含所述预设代码安全判定标准;
[0130]
第一检测结果获取单元,用于利用所述卷积神经网络模型对所述目标二进制信息进行检测,以得到第一检测结果;
[0131]
信息翻转单元,用于若所述第一检测结果为所述目标二进制信息中存在缺陷,则将所述目标二进制信息翻转;
[0132]
第二检测结果获取单元,用于将翻转后所述目标二进制信息输入至所述卷积神经网络模型,以得到第二检测结果;
[0133]
不合格判定单元,用于若所述第二检测结果为所述目标二进制信息中存在缺陷,则判定所述待分析代码不合格;
[0134]
合格判定单元,用于若所述第一检测结果为所述目标二进制信息中不存在缺陷,
则判定所述待分析代码合格;
[0135]
代码删除单元,用于将所述卷积神经网络模型中的所述待分析代码删除。
[0136]
进一步的,本技术实施例还提供了一种电子设备。图7是根据一示例性实施例示出的电子设备20结构图,图中的内容不能认为是对本技术的使用范围的任何限制。
[0137]
图7为本技术实施例提供的一种电子设备20的结构示意图。该电子设备20,具体可以包括:至少一个处理器21、至少一个存储器22、电源23、通信接口24、输入输出接口25和通信总线26。其中,所述存储器22用于存储计算机程序,所述计算机程序由所述处理器21加载并执行,以实现前述任一实施例公开的代码检测方法中的相关步骤。另外,本实施例中的电子设备20具体可以为电子计算机。
[0138]
本实施例中,电源23用于为电子设备20上的各硬件设备提供工作电压;通信接口24能够为电子设备20创建与外界设备之间的数据传输通道,其所遵循的通信协议是能够适用于本技术技术方案的任意通信协议,在此不对其进行具体限定;输入输出接口25,用于获取外界输入数据或向外界输出数据,其具体的接口类型可以根据具体应用需要进行选取,在此不进行具体限定。
[0139]
另外,存储器22作为资源存储的载体,可以是只读存储器、随机存储器、磁盘或者光盘等,其上所存储的资源可以包括操作系统221、计算机程序222等,存储方式可以是短暂存储或者永久存储。
[0140]
其中,操作系统221用于管理与控制电子设备20上的各硬件设备以及计算机程序222,其可以是windows server、netware、unix、linux等。计算机程序222除了包括能够用于完成前述任一实施例公开的由电子设备20执行的代码检测方法的计算机程序之外,还可以进一步包括能够用于完成其他特定工作的计算机程序。
[0141]
进一步的,本技术实施例还公开了一种存储介质,所述存储介质中存储有计算机程序,所述计算机程序被处理器加载并执行时,实现前述任一实施例公开的代码检测方法步骤。
[0142]
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
[0143]
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
[0144]
以上对本发明所提供的一种代码检测方法、装置、设备及存储介质进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理
解为对本发明的限制。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献