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

一种应用程序代码检测方法和计算机可读存储介质与流程

2022-05-18 11:51:43 来源:中国专利 TAG:


1.本发明涉及检测技术领域,具体涉及一种应用程序代码检测方法和计算机可读存储介质。


背景技术:

2.对于应用程序而言,代码质量直接决定了应用程序的稳定性和可靠性。尤其是那些基于服务器-客户机(client-server,c/s)架构的应用程序,比如,游戏,服务器会面临客户端的外部数据或者外挂攻击,若服务器在相关代码上的保护不够全面就有可能造成应用程序宕机,因此,需要对应用程序进行代码检测,检测出可能存在宕机风险的异常代码信息。现有的检测方法主要是构造异常或者随机数据动态发送至服务器,当应用程序宕机后,对宕机后的数据进行检测。
3.在对现有技术的研究和实践过程中,本发明的发明人发现,现有的检测方法属于黑盒验证,对于部分需要前置条件或其他运行条件才会执行的代码来说,在检测过程中很难做到全部覆盖,而且需要不断的发送异常测试数据,一旦出现宕机现象,就需要定位到具体的异常测试数据,大大增加了检测过程中的计算开销,因此,导致应用程序代码检测的检测准确率和检测效率大大降低。


技术实现要素:

4.本发明实施例提供一种应用程序代码检测方法和计算机可读存储介质,可以提高应用程序代码检测的检测准确率和检测效率。
5.一种应用程序代码检测方法,包括:
6.获取待检测应用程序的代码文件,所述代码文件包括多段代码;
7.对所述多段代码进行符号化处理,得到所述多段代码的语法链;
8.在所述语法链中识别出所述待检测应用程序中接收外部数据的至少一数据接收函数;
9.根据所述至少一数据接收函数,在所述代码文件中确定出所述外部数据的数据参数;
10.基于所述数据参数,对所述代码文件中的代码进行规则扫描,得到所述待检测应用程序的代码检测结果。
11.相应的,本发明实施例提供一种应用程序代码检测装置,包括:
12.获取单元,用于获取待检测应用程序的代码文件,所述代码文件包括多段代码;
13.处理单元,用于对所述多段代码进行符号化处理,得到所述多段代码的语法链;
14.识别单元,用于在所述语法链中识别出所述待检测应用程序中接收外部数据的至少一数据接收函数;
15.确定单元,用于根据所述至少一数据接收函数,在所述代码文件中确定出所述外部数据的数据参数;
16.检测单元,用于基于所述数据参数,对所述代码文件中的代码进行规则扫描,得到所述待检测应用程序的代码检测结果。
17.可选的,在一些实施例中,所述获取单元,具体可以用于获取所述待检测应用程序的开发数据,并在所述开发数据中筛选出初始代码文件;当所述初始代码文件的类型为源代码文件时,将所述初始代码文件作为所述待检测应用程序的代码文件;当所述初始代码文件的类型为二进制文件时,对所述初始代码文件进行反编译,得到所述初始代码文件对应伪代码文件,并将所述伪代码文件作为所述待检测应用程序的代码文件,且所述代码文件的类型为伪代码文件。
18.可选的,在一些实施例中,所述处理单元,具体可以用于当所述代码文件的类型为伪代码文件时,对所述代码文件中的伪代码进行调整,得到目标代码,并对所述目标代码进行符号化处理,得到所述多段代码的语法链;当所述代码文件的类型为源代码文件时,将所述代码文件中的代码作为目标代码,并对所述目标代码进行符号化处理,得到所述多段代码的语法链。
19.可选的,在一些实施例中,所述处理单元,具体可以用于在所述目标代码中识别出语法元素对应的语法代码;在所述目标代码中对所述语法代码进行切割,得到所述目标代码的对象结构;根据所述对象结构,将所述切割后的语法代码进行连接,得到所述多段代码的语法链。
20.可选的,在一些实施例中,所述确定单元,具体可以用于在所述代码文件中筛选出所述至少一数据接收函数对应的代码,得到接收函数代码;在所述接收函数代码中识别出所述外部数据的数据参数。
21.可选的,在一些实施例中,所述检测单元,具体可以用于在所述接收函数代码中确定出所述数据参数对应的目标接收函数代码和调用所述数据参数的第一数据调用函数;根据所述目标接收函数代码和第一数据调用函数,对所述代码文件中的代码进行规则扫描,得到所述待检测应用程序的代码检测结果。
22.可选的,在一些实施例中,所述检测单元,具体可以用于对所述目标接收函数代码进行规则扫描,得到第一检测结果;根据所述第一数据调用函数,在所述代码文件中识别出调用所述数据参数的函数对应的目标函数代码,并对所述目标函数代码进行规则扫描,得到第二检测结果;将所述第一检测结果与第二检测结果进行融合,得到所述待检测应用程序的代码检测结果。
23.可选的,在一些实施例中,所述检测单元,具体可以用于根据所述目标接收函数代码的代码类型,确定所述目标接收函数代码的检测规则;基于所述检测规则,对所述目标接收函数代码进行规则扫描,得到使所述待检测应用程序产生宕机风险的异常代码信息,将所述异常代码信息作为所述第一检测结果。
24.可选的,在一些实施例中,所述检测单元,具体可以用于在所述代码文件中识别出所述第一数据调用函数对应的调用函数代码,并在调用函数代码中确定出调用所述数据参数的第一调用参数;在所述调用函数代码中筛选出所述第一调用参数对应的目标调用函数代码和调用所述数据参数的第二数据调用函数,并对所述目标调用函数代码进行规则扫描;返回执行在所述代码文件中识别出所述第二数据调用函数对应的调用函数代码的步骤,直至所述数据参数的调用层次超过预设层次阈值或所述代码文件中调用所述数据参数
的数据调用函数对应的目标函数代码全部扫描为止,得到第二检测结果,所述调用层次为数据调用函数调用所述数据参数的层次,所述第一数据调用函数的调用层次为一次,所述第二数据调用函数的调用层次为两次。
25.此外,本发明实施例还提供一种电子设备,包括处理器和存储器,所述存储器存储有应用程序,所述处理器用于运行所述存储器内的应用程序实现本发明实施例提供的应用程序代码检测方法。
26.此外,本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有多条指令,所述指令适于处理器进行加载,以执行本发明实施例所提供的任一种应用程序代码检测方法中的步骤。
27.本发明实施例在获取待检测应用程序的代码文件后,该代码文件包括多段代码,对多段代码进行符号化处理,得到多段代码的语法链,然后,在语法链中识别出待检测应用程序中接收外部数据的至少一数据接收函数,根据至少一数据接收函数,在代码文件中确定出外部数据的数据参数,然后,基于数据参数,对代码文件中的代码进行规则扫描,得到待检测应用程序的代码检测结果;由于该方案通过在代码文件中代码的语法链,识别出数据接收函数,然后,通过数据接收函数在代码文件中确定出数据参数,可以准确的对代码文件中使用该数据参数的代码进行宕规则扫描,属于模拟接收到外部数据的白盒测试,而且无需输入测试数据,因此,可以大大提升应用程序代码检测的检测准确率和检测效率。
附图说明
28.为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
29.图1是本发明实施例提供的应用程序代码检测方法的场景示意图;
30.图2是本发明实施例提供的应用程序代码检测方法的流程示意图;
31.图3是本发明实施例提供的对代码文件中目标代码检测的示意图;
32.图4是本发明实施例提供的输出的宕机风险的问题列表的示意图;
33.图5是本发明实施例提供的应用程序代码检测的技术侧架构图;
34.图6是本发明实施例提供的应用程序代码检测方法的另一流程示意图;
35.图7是本发明实施例提供的应用程序代码检测方法的产品架构图;
36.图8是本发明实施例提供的应用程序代码检测装置的结构示意图;
37.图9是本发明实施例提供的电子设备的结构示意图。
具体实施方式
38.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
39.本发明实施例提供一种应用程序代码检测方法、装置和计算机可读存储介质。其
中,该应用程序代码检测装置可以集成在电子设备中,该电子设备可以是服务器,也可以是终端等设备。
40.其中,服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、网络加速服务(content delivery network,cdn)、以及大数据和人工智能平台等基础云计算服务的云服务器。终端可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此。终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本技术在此不做限制。
41.例如,参见图1,以应用程序代码检测装置集成在电子设备中为例,电子设备在获取待检测应用程序的代码文件后,该代码文件包括多段代码,对多段代码进行符号化处理,得到多段代码的语法链,然后,在语法链中识别出待检测应用程序中接收外部数据的至少一数据接收函数,根据至少一数据接收函数,在代码文件中确定出外部数据的数据参数,然后,基于数据参数,对代码文件中的代码进行规则扫描,得到待检测应用程序的代码检测结果。
42.其中,代码检测主要目的是在待检测应用程序中检测出可能会产生宕机风险的异常代码或错误代码配置等异常代码信息,所谓宕机可以为应用程序由于代码错误或者系统异常,导致服务进程无法响应,需要重启进行恢复。
43.以下分别进行详细说明。需要说明的是,以下实施例的描述顺序不作为对实施例优选顺序的限定。
44.本实施例将从应用程序代码检测装置的角度进行描述,该应用程序代码检测装置具体可以集成在电子设备中,该电子设备可以是服务器,也可以是终端等设备;其中,该终端可以包括智能手机、平板电脑、笔记本电脑、以及个人计算机(pc,personal computer)、可穿戴设备、虚拟现实设备或其他可以对应用程序进行宕机检测的智能设备等设备。
45.一种应用程序代码检测方法,包括:
46.获取待检测应用程序的代码文件,该代码文件包括多段代码,对多段代码进行符号化处理,得到多段代码的语法链,然后,在语法链中识别出待检测应用程序中接收外部数据的至少一数据接收函数,根据至少一数据接收函数,在代码文件中确定出外部数据的数据参数,然后,基于数据参数,对代码文件中的代码进行规则扫描,得到待检测应用程序的代码检测结果。
47.如图2所示,该应用程序代码检测方法的具体流程如下:
48.101、获取待检测应用程序的代码文件。
49.其中,代码文件顾名思义为存储应用程序的代码的文件,该代码文件中存储多段代码。代码文件中存储的可以是应用程序开发时的源代码,比如,可以为c 文件或lua文件等,当应用程序的为二进制文件时,在宕机测试时,还可以将二进制文件转译后的伪代码文件作为代码文件,其中,二进制文件可以包括各类可执行文件,比如,bin可执行文件等。
50.获取代码文件可以是例如,获取待检测应用程序的开发数据,比如,可以接收应用程序服务商上传或发送的开发数据,还可以在网络上或者其他数据库中获取待检测应用程序的开发数据。在开发数据中筛选出初始代码文件,比如,在开发数据中识别出代码存储区域的存储位置,根据存储位置,在开发数据中筛选出初始代码文件。当初始代码文件的类型
为源代码文件时,将初始代码文件作为待检测应用程序的代码文件,比如,当初始代码文件的类型为c 文件或lua文件时,就可以将该源代码文件作为待检测应用程序的代码文件。当初始代码文件的类型为二进制文件时,对初始代码文件进行反编译,得到初始代码文件对应的伪代码文件,比如,将bin可执行文件等二进制文件中的数据进行反编译,就可以得到二进制文件对应的伪代码文件,伪代码文件中可以包括伪代码,所谓伪代码可以为采用转换方式将执行文件中的二进制数据转换成用来表示该执行文件对应的虚拟的代码,该代码可以跟源代码相同也可以不同,但是包含了源代码中全部包含的语言元素,从间接上反映了源代码的数据结构及运行操作等代码属性。当待检测应用程序的代码文件为伪代码文件时,此时待检测应用程序的代码文件的类型就可以为伪代码文件。
51.102、对多段代码进行符号化处理,得到多段代码的语法链。
52.其中,符号化处理主要是将代码文件中代码按照空格或符号等语法元素进行分割,从而形成内存中的数据结构,然后,将数据结构中的语法元素进行双向链接得到语法链的处理过程。
53.其中,语法链可以为应用程序的代码中多个元素(变量、常量和函数名等)形成的双链表结构。语法链中包含了代码文件中所有函数的函数名称、函数参数和函数范围等信息。
54.例如,根据代码文件的类型,对代码文件中的多段代码进行符号处理,得到多段代码的语法链,具体可以如下:
55.(1)当代码文件的类型为伪代码文件时,对代码文件中的伪代码进行调整,得到目标代码,并对目标代码进行符号化处理,得到代码文件中的代码的语法链。
56.例如,当代码文件的类型为伪代码时,需要对伪代码文件进行预处理,预处理的过程主要是对伪代码文件中的伪代码进行调整,比如,可以包括去除无需处理的函数定义内容等调整操作,从而得到目标代码。对目标代码进行符号化处理,比如,在目标代码中识别出语法元素对应的语法代码,语法元素主要包括变量、常量、函数名、函数参数和函数范围等。在目标代码中对语法代码进行切割,得到目标代码的对象结构,根据对象结构,将切割后的语法代码进行连接,得到代码文件中代码的语法链。语法链可以如下所示:
[0057][0058]
因此,可以发现语法链中包含代码文件中的函数代码的函数名称、函数参数和函数范围等信息。
[0059]
(2)当代码文件的类型为源代码文件时,将代码文件中的代码作为目标代码,并对目标代码进行符号化处理,得到代码文件中代码的语法链。
[0060]
例如,当代码文件的类型为源代码文件时,就可以直接将代码文件中的源代码作为目标代码,对目标代码进行符号化处理,对目标代码符号化处理的过程具体可以参见上文,在此就不再赘述,从而得到代码文件中代码的语法链。
[0061]
103、在语法链中识别出待检测应用程序中接收外部数据的至少一数据接收函数。
[0062]
其中,外部数据可以为c/s架构的应用程序中终端接收到用户的操作指令或者其他输入信息,根据终端和服务器的通信协议,将这些输入信息转换为符合通信协议的数据。
外部数据通常是由终端发送至服务器的,因此,也可以称之为协议数据。
[0063]
其中,数据接收函数可以为服务器中第一个接收到外部数据的函数,也可以称为协议入口函数,可以理解作为为外部数据输入至服务器的一个入口的函数。
[0064]
例如,获取预设接收函数的预设函数名称,比如,可以通过前期收集到的数据接收函数的命名特征,从而得到预设接收函数的预设函数名称。每个应用程序的代码文件中可以存在一个或多个数据接收函数。在代码文件的目标代码的语法链中识别出函数的当前函数名称,比如,获取语法链中函数名对应的位置,根据该位置,就可以识别出语法链中函数的当前函数名。将预设函数名称与代码文件中代码的当前函数名称进行匹配,将与预设函数名称匹配成功的目标函数名称对应的数据接收函数作为接收外部数据的数据接收函数,从而得到至少一数据接收函数。
[0065]
104、根据至少一数据接收函数,在代码文件中确定出外部数据的数据参数。
[0066]
其中,数据参数为用于接收或调用外部数据的参数,以外部数据为协议数据为例,该数据参数就可以为协议参数。该数据参数用于确定代码文件中代码对应的函数是否接收、使用或调用了该外部数据,当函数中存在该数据参数时,就确定该函数接收、使用或调用了该外部数据。因此,确定该数据参数,主要用于在对待检测应用程序进行宕机测试时,模拟服务器接收到外部数据,通过外部数据在代码文件的运行过程或运行轨迹,对使用了该外部数据的函数对应的代码进行检测,从而确定代码文件中存在宕机风险的异常代码信息。
[0067]
例如,在代码文件中筛选出至少一数据接收函数对应的代码,得到接收函数代码,在接收函数代码中识别出外部数据的数据参数,比如,根据识别规则,获取接收函数代码中数据参数的代码位置,根据该代码位置,就可以确定出外部数据的数据参数。
[0068]
可选的,在确定出数据参数之后,还可以在接收函数代码中查询是否存在与该数据参数相关的传递和改变的变量,如果存在,就可以认为确定的数据参数准确无误,反之,就可以再次在接收函数代码中确定出数据参数。
[0069]
105、基于数据参数,对代码文件中的代码进行规则扫描,得到待检测应用程序的代码检测结果。
[0070]
例如,可以在接收函数代码中确定出数据参数对应的目标接收函数代码和调用数据参数的第一数据调用函数,根据目标接收函数代码和第一数据调用函数,对代码文件中的代码进行规则扫描,得到待检测应用程序的代码检测结果,具体可以如下:
[0071]
s1、在接收函数代码中确定出数据参数对应的目标接收函数代码和调用数据参数的第一数据调用函数。
[0072]
例如,在接收函数代码中筛选出使用数据参数代码,从而得到目标接收函数代码,在接收函数代码中筛选出需要传递或调用数据参数的代码,在代码文件中就可以筛选出传递或调用数据参数的代码,在这段代码中识别出函数名称的字段,将该字段对应的函数作为调用数据参数的第一数据调用函数。
[0073]
s2、根据目标接收函数代码和第一数据调用函数,对代码文件中的代码进行规则扫描,得到待检测应用程序的代码检测结果。
[0074]
例如,可以对目标接收函数代码进行规则扫描,得到第一检测结果,根据第一数据调用函数,在代码文件中识别出调用数据参数的函数对应的目标函数代码,并对目标函数
代码进行规则扫描,得到第二检测结果,将第一检测结果与第二检测结果进行融合,得到待检测应用程序的代码检测结果。具体可以如下:
[0075]
(1)对目标接收函数代码进行规则扫描,得到第一检测结果。
[0076]
例如,根据目标接收函数代码的代码类型,确定目标接收函数代码的检测规则,比如,根据接收函数的函数类型,从而确定目标接收函数代码的代码类型,譬如,根据数据接收函数的函数类型,确定数据接收函数对应的代码中包含的所有代码的代码类型,得到代码类型集合,在代码类型集合中筛选出目标接收函数代码的代码类型。根据代码类型,确定目标接收函数的检测规则,比如,在预设检测规则集合中筛选出代码类型对应的检测规则。
[0077]
基于检测规则,对目标接收函数代码进行规则扫描,得到使待检测应用程序产生宕机风险的异常代码信息,比如,该检测规则可以为包含使得待检测应用程序产生宕机风险的预设异常代码信息规则的扫描规则,采用该扫描规则对目标接收函数代码进行扫描,扫描的主要过程就是将扫描到的代码与预设异常代码规则进行匹配,将匹配成功的异常代码筛选出来,从而得到异常代码信息,该异常代码信息可以包括该异常代码在代码文件中的位置信息、以及该异常代码使得待检测应用程序存在宕机风险的风险类型和错误信息描述等信息。将异常代码信息作为第一检测结果。
[0078]
其中,宕机风险可以是使得待检测应用程序宕机的一些风险因素或风险条件等信息。
[0079]
(2)根据第一数据调用函数,在代码文件中识别出调用数据参数的函数对应的目标函数代码,并对目标函数代码进行规则扫描,得到第二检测结果。
[0080]
例如,在代码文件中识别出第一数据调用函数对应的调用函数代码,在调用函数代码中确定出调用数据参数的第一调用参数,在调用函数代码中筛选出第一调用参数对应的目标调用函数代码和调用数据参数的第二数据调用函数,比如,直接在调用函数代码中筛选出与第一调用函数相关的代码作为目标调用函数代码,由于第一调用参数是用于调用数据参数的,因此,在调用函数代码中筛选出包含第一调用参数的变量的函数名,将该函数名对应的函数作为调用数据参数的第二数据调用函数。对目标调用函数代码进行规则扫描,规则扫描的方法在上文中目标接收函数代码的检测方法相同,再此就不再赘述,从而得到目标调用函数代码的代码检测结果。
[0081]
返回执行在代码文件中识别出第二数据调用函数对应的调用函数代码的步骤,比如,在代码文件中识别出第二数据调用函数对应的第二调用函数代码,并在第二调用函数代码中确定出调用数据参数的第二调用参数,在第二调用函数代码中筛选出第二调用参数对应的第二目标调用函数代码,对第二目标调用函数代码进行规则扫描,在对第二目标调用函数代码进行规则扫描时,还可以在第二调用函数代码中查询是否存在包含第二调用参数的第三数据调用函数,第三数据调用函数用于调用数据参数,直至数据参数的调用层次超过预设层次阈值或代码文件中调用数据参数的数据调用函数对应的目标函数代码全部扫描为止,比如,当不存在第三数据调用函数时,此时,就可以停止扫描,将第一数据调用函数和第二数据调用函数对应的目标调用函数代码的检测结果作为第二检测结果。当存在第三数据调用函数时,就继续在代码文件中识别出第三数据调用函数对应的第三调用函数代码,并在第三调用函数代码中确定调用数据参数的第三调用参数,然后,根据第三调用参数,对第三数据调用函数代码进行规则扫描,当第三调用函数代码中如果还存在第四数据
调用函数时,就继续对第四数据调用函数对应的调用函数代码进行规则扫描,直至数据参数的调用层次超过预设层次阈值或者代码文件中调用数据参数的数据调用函数对应的目标函数代码全部扫描完时为止,调用层次可以为数据调用函数调用数据参数的层次,而数据调用函数主要通过调用参数对数据参数进行调用,因此,第一调用参数为第一次对数据参数进行调用,第二调用参数为第二次对数据参数进行调用,依次类推,这样就可以得出第一数据调用函数的调用层次为一次,第二数据调用函数的调用层次为二次,依次类推。将调用数据参数的全部数据调用函数对应的目标函数代码的检测结果融合就可以得到第二检测结果。
[0082]
其中,在代码文件中筛选出使用和调用数据参数的目标代码进行规则扫描的过程,可以看作是递归检测,根据数据接收函数,查找使用数据参数的相关变量(目标代码),按照变量类型,对目标代码进行规则扫描,然后,再在代码文件中查找调用数据参数的数据调用函数,然后,再返回在数据调用函数中筛选出与数据参数相关的变量,再进行规则扫描,这样一个递归的过程,直至数据参数的调用层次达到预设层次或者代码文件中调用数据参数的数据调用函数对应的目标函数代码全部扫描为止,具体可以如图3所示。
[0083]
其中,对应用程序代码检测的检测方式主要包含静态检测和动态检测,静态检测和动态检测的主要区别就在于待检测应用程序是否运行,静态检测时不需要待检测应用程序处于运行状态,而动态检测就需要待检测应用程序处于运行状态。在本方案中,通过确定出待检测应用程序的数据参数,从而模拟待检测应用程序运行,在对使用或调用该数据参数的代码通过规则扫描的方式进行检测,这种检测方式属于静态检测。
[0084]
(3)将第一检测结果和第二检测结果进行融合,得到待检测应用程序的代码检测结果。
[0085]
例如,可以将第一检测结果对应的异常代码信息和第二检测结果对应的异常代码信息进行融合,就可以得到待检测应用程序的代码检测结果,比如,将两个检测结果中异常代码在代码文件中的位置信息、该异常代码使得待检测应用程序存在宕机风险的风险类型和错误信息描述等信息等进行归纳和整合,从而得到待检测应用程序的代码文件中存在宕机风险的异常代码的风险类型、错误信息描述和位置信息等,将这些信息作为待检测应用程序的代码检测结果,对于代码检测结果可以采用问题列表的形式进行输出,比如,可以以xml的格式进行输出,具体可以如图4所示。在输出的问题列表中,对于源代码的代码文件来说,预警出的风险问题可以定位到源代码的问题行,对于伪代码的代码文件来说,预警出的风险问题可以定位到问题行前后10行,并标记风险点,便于项目组程序排查问题。对于输出风险点的问题列表可以在扫描或检测发现到风险点,就可以输出风险点的行号和风险类型(比如存在”未经范围检测作为下标使用”的风险),因此在问题定位方面,不会给项目开发侧造成任何时间开销。
[0086]
其中,对于检测结果来说,目前可以检测出包括协议参数未经检测造成的空指针、越界等多类因协议参数异常导致宕机的风险问题类型。
[0087]
其中,对于待检测应用程序的代码检测,从技术侧来说,主要是从服务器端获取待检测应用程序的源代码或伪代码,对源代码和伪代码中的使用数据参数的函数对应的目标代码进行检测,从而输出报错列表等信息作为风险预警。检测的具体过程首先是探测数据接收函数,然后,在代码文件中递归遍历使用和调用数据参数的函数对应的目标代码,对这
些目标代码进行规则扫描,主要检测目标代码对外部数据的保护是否完成,是否会对待检测应用程序造成宕机风险,具体可以如图5所示。对于这种宕机检测方式可以直接在windows/linux环境下进行扫描,也可以部署或集成在工具平台进行使用。
[0088]
由以上可知,本发明实施例在获取待检测应用程序的代码文件后,该代码文件包括多段代码,对多段代码进行符号化处理,得到多段代码的语法链,然后,在语法链中识别出待检测应用程序中接收外部数据的至少一数据接收函数,根据至少一数据接收函数,在代码文件中确定出外部数据的数据参数,然后,基于数据参数,对代码文件中的代码进行规则扫描,得到待检测应用程序的代码检测结果;由于该方案通过在代码文件中代码的语法链,识别出数据接收函数,然后,通过数据接收函数在代码文件中确定出数据参数,可以准确的对代码文件中使用该数据参数的代码进行规则扫描,属于模拟接收到外部数据的白盒测试,而且无需输入测试数据,因此,可以大大提升应用程序代码检测的检测准确率和检测效率。
[0089]
根据上面实施例所描述的方法,以下将举例作进一步详细说明。
[0090]
在本实施例中,将以该应用程序代码检测装置具体集成在电子设备,电子设备为服务器,待检测应用程序为待检测游戏为例进行说明。
[0091]
如图6所示,一种应用程序代码检测方法,具体流程如下:
[0092]
201、服务器获取待检测游戏的代码文件。
[0093]
例如,服务器可以接收游戏服务商上传或发送的待检测游戏的开发数据,还可以在网络上或者其他数据库中获取待检测游戏的开发数据。在开发数据中识别出代码存储区域的存储位置,根据存储位置,在开发数据中筛选出初始代码文件。当初始代码文件的类型为c 文件或lua文件时,就可以将该源代码文件作为待检测游戏的代码文件。当初始代码文件的类型为二进制文件时,将bin可执行文件等二进制文件中的数据进行反编译,就可以得到二进制文件对应的伪代码文件,伪代码文件中可以包括伪代码。
[0094]
202、服务器对多段代码进行符号化处理,得到多段代码的语法链。
[0095]
例如,服务器根据代码文件的类型,对代码文件中的多段代码进行符号处理,得到多段代码的语法链,具体可以如下:
[0096]
(1)当代码文件的类型为伪代码文件时,服务器对代码文件中的伪代码进行调整,得到目标代码,并对目标代码进行符号化处理,得到代码文件中的代码的语法链。
[0097]
例如,当代码文件的类型为伪代码时,服务器去除无需处理的函数定义内容等调整操作,得到目标代码。在目标代码中识别出语法元素对应的语法代码,语法元素主要包括变量、常量、函数名、函数参数和函数范围等。在目标代码中对语法代码进行切割,得到目标代码的对象结构,根据对象结构,将切割后的语法代码进行连接,得到代码文件中代码的语法链。
[0098]
下面以目标代码如下所示为例,详细描述对目标代码进行符号化处理,得到语法链的具体处理过程。目标代码如下所示:
[0099]
[0100]
在目标代码中识别出语法元素对应的语法代码为int、randfunc、int、m、return、m。按照空格或者字符在目标代码中对语法代码进行切割,得到目标代码的对象结构可以如下:
[0101][0102]
根据对象结构,将切割后的语法代码进行双向链接,得到代码文件中的代码语法链,语法链如下所示:
[0103][0104]
因此,可以发现语法链中包含代码文件中的函数代码的函数名称、函数参数和函数范围等信息。
[0105]
(2)当代码文件的类型为源代码文件时,服务器将代码文件中的代码作为目标代码,并对目标代码进行符号化处理,得到代码文件中代码的语法链。
[0106]
例如,当代码文件的类型为源代码文件时,服务器就可以直接将代码文件中的源代码作为目标代码,对目标代码进行符号化处理,对目标代码符号化处理的过程具体可以参见上文,在此就不再赘述,从而得到代码文件中代码的语法链。
[0107]
203、服务器在语法链中识别出待检测游戏中接收外部数据的至少一数据接收函数。
[0108]
例如,服务器可以通过前期收集到的数据接收函数的命名特征,从而得到预设接收函数的预设函数名称。获取语法链中函数名对应的位置,根据该位置,就可以识别出语法链中函数的当前函数名。将预设函数名称与代码文件中代码的当前函数名称进行匹配,将与预设函数名称匹配成功的目标函数名称对应的数据接收函数作为接收外部数据的数据接收函数。比如,以预设函数名称可以包括“a()”、“b()”、“handlemsg(msg*msg)”、“messagehandle(pack*pack)”等,当与这些预设函数匹配成功的函数名称为“*handle*;*msg*”时,在预设函数名称中筛选出全部或部分包含匹配成功的函数名称对应的数据接收作为接收外部数据的数据接收函数。因此,可以确定接收外部数据的数据接收函数可以为“handlemsg(msg*msg)”和“messagehandle(pack*pack)”等。
[0109]
204、服务器根据至少一数据接收函数,在代码文件中确定出外部数据的数据参数。
[0110]
例如,服务器在代码文件中筛选出数据接收函数对应的代码,得到接收函数代码,比如,以数据接收函数为handlemsg(msg*msg)为例,在代码文件中筛选出该数据接收函数的代码如下所示:
[0111][0112][0113]
从而可以得到接收函数代码。根据识别规则,获取接收函数代码中数据参数的代码位置为函数名中定义变量参数,比如,可以为(msg*msg)中msg的位置,根据该代码位置,就可以确定出用于接收外部数据的数据参数为msg。
[0114]
可选的,在确定出数据参数为msg之后,还可以在接收函数代码中查询是否存在与msg相关的传递和改变的变量,如果存在,就可以认为确定的数据参数准确无误,反之,就可以再次在接收函数代码中确定出数据参数。
[0115]
205、服务器在接收函数代码中确定出数据参数对应的目标接收函数代码和调用数据参数的第一数据调用函数。
[0116]
例如,服务器在接收函数代码中筛选出使用数据参数的代码,比如,以数据接收函数为handlemsg(msg*msg)为例,在代码文件中就可以筛选出使用msg的代码作为目标接收函数代码,譬如,目标接收函数代码可以为“int msg_field=msg

field1;”。在接收函数代码中筛选出需要传递或调用数据参数的代码,比如,还是以数据接收函数为handlemsg(msg*msg)为例,在代码文件中就可以筛选出传递或调用数据参数的代码,譬如,可以为“demofunleve11_1(msg_field);demofunleve11_2(msg

obj);”在这段代码中识别出函数名称的字段,函数名称的字段可以为“demofunleve11”,将该函数作为调用数据参数的第一数据调用函数。
[0117]
206、服务器对目标接收函数代码进行规则扫描,得到第一检测结果。
[0118]
例如,服务器根据接收函数的函数类型,确定数据接收函数对应的代码中包含的所有代码的代码类型,得到代码类型集合,在代码类型集合中筛选出目标接收函数代码的代码类型。在预设检测规则集合中筛选出代码类型对应的检测规则。该检测规则可以为包含使得待检测游戏产生宕机风险的预设异常代码信息规则的扫描规则。采用该扫描规则对目标接收函数代码进行规则扫描,扫描的主要过程就是将扫描到的代码与预设异常代码规则进行匹配,将匹配成功的异常代码筛选出来,从而得到异常代码信息,该异常代码信息可以包括该异常代码在代码文件中的位置信息、以及该异常代码使得待检测游戏存在宕机风险的风险类型和错误信息描述等信息。将异常代码信息作为第一检测结果。
[0119]
207、服务器根据第一数据调用函数,在代码文件中识别出调用数据参数的函数对应的目标函数代码,并对目标函数代码进行规则扫描,得到第二检测结果。
[0120]
例如,以第一数据调用函数demofunleve11为例,服务器在代码文件中就可以识别出第一数据调用函数对应的调用函数代码,具体可以如下:
[0121][0122]
服务器在调用函数代码中确定出调用数据参数的第一调用参数,可以发现该调用函数代码中a的值是存在传递和调用的,因此,可以确定第一调用参数就为“a”。然后,在调用函数代码中筛选出第一调用参数对应的目标调用函数代码和调用数据参数的第二数据调用函数,比如,直接在调用函数代码中筛选出与第一调用函数相关的代码作为目标调用函数代码,由于第一调用参数是用于调用数据参数的,因此,在调用函数代码中筛选出包含第一调用参数的变量的函数名,将该函数名对应的函数作为调用数据参数的第二数据调用函数,比如,在demofunleve11的调用函数代码中就可以将函数名为“demofunleve12”的函数作为第二数据调用函数。对目标调用函数代码进行规则扫描,规则扫描的方法在上文中目标接收函数代码的方法相同,再此就不再赘述,从而得到目标调用函数代码的代码检测结果。
[0123]
服务器在代码文件中继续识别出第二数据调用函数对应的第二调用函数代码,并在第二调用函数代码中确定出调用数据参数的第二调用参数,在第二调用函数代码中筛选出第二调用参数对应的第二目标调用函数代码,对第二目标调用函数代码进行规则扫描,在对第二目标调用函数代码进行规则扫描时,还可以在第二调用函数代码中查询是否存在包含第二调用参数的第三数据调用函数。当不存在第三数据调用函数时,此时,就可以停止检测,将第一数据调用函数和第二数据调用函数对应的目标调用函数代码的检测结果作为第二检测结果。当存在第三数据调用函数时,就继续在代码文件中识别出第三数据调用函数对应的第三调用函数代码,并在第三调用函数代码中确定调用数据参数的第三调用参数,然后,根据第三调用参数,对第三数据调用函数代码进行规则扫描,当第三调用函数代码中如果还存在第四数据调用函数时,就继续对第四数据调用函数对应的调用函数代码进行规则扫描,采用数据调用函数递归检测的检测方式,直至数据参数的调用层次超过预设层次或者代码文件中调用数据参数的数据调用函数对应的目标函数代码全部扫描完时为止。将调用数据参数的全部数据调用函数对应的目标函数代码的检测结果融合就可以得到第二检测结果。
[0124]
208、服务器将第一检测结果和第二检测结果进行融合,得到待检测游戏的代码检测结果。
[0125]
例如,服务器将两个检测结果中异常代码在代码文件中的位置信息、该异常代码使得待检测游戏存在宕机风险的风险类型和错误信息描述等信息等进行融合,从而得到待检测游戏的代码文件中存在宕机风险的异常代码的风险类型、错误信息描述和位置信息等,将这些信息作为待检测游戏的宕机检测结果,对于宕机检测结果可以采用xml的格式的问题列表的形式进行输出。
[0126]
其中,对于对待检测游戏进行代码检测,从产品侧,主要分了三个部分,如图7所示,服务器接收二进制文件或者源代码文件的输出,然后,对二进制文件进行加载,转换为伪代码,然后,对伪代码或源代码进行规则扫描,比如,可以采用扫描工具直接对代码文件中的代码进行规则扫描,其中,扫描工具有windows版本和linux版本,支持主流操作系统的软件和工具平台接入使用。因此,整个的检测过程就是一个扫描的过程,从而输出待检测游戏的宕机风险问题信息列表。
[0127]
由以上可知,本实施例的服务器在获取待检测应用程序的代码文件后,该代码文件包括多段代码,对多段代码进行符号化处理,得到多段代码的语法链,然后,在语法链中识别出待检测应用程序中接收外部数据的至少一数据接收函数,根据至少一数据接收函数,在代码文件中确定出外部数据的数据参数,然后,基于数据参数,对代码文件中的代码进行规则扫描,得到待检测应用程序的代码检测结果;由于该方案通过在代码文件中代码的语法链,识别出数据接收函数,然后,通过数据接收函数在代码文件中确定出数据参数,可以准确的对代码文件中使用该数据参数的代码进行规则扫描,属于模拟接收到外部数据的白盒测试,而且无需输入测试数据,因此,可以大大提升应用程序代码检测的检测准确率和检测效率。
[0128]
为了更好地实施以上方法,本发明实施例还提供一种应用程序代码检测装置,该应用程序代码检测装置可以集成在电子设备,比如服务器或终端等设备中,该终端可以包括智能手机、平板电脑、笔记本电脑和/或个人计算机等。
[0129]
例如,如图8所示,该应用程序代码检测装置可以包括获取单元301、处理单元302、识别单元303、确定单元304和检测单元305,如下:
[0130]
(1)获取单元301;
[0131]
获取单元301,用于获取待检测应用程序的代码文件,该代码文件包括多段代码。
[0132]
例如,获取单元301,具体可以用于获取待检测应用程序的开发数据,并在开发数据中筛选出初始代码文件,当初始代码文件的类型为源代码文件时,将初始代码文件作为待检测应用程序的代码文件,当初始代码文件的类型为二进制文件时,对初始代码文件进行反编译,得到初始代码文件对应伪代码文件,并将伪代码文件作为待检测应用程序的代码文件,且代码文件的类型为伪代码文件。
[0133]
(2)处理单元302;
[0134]
处理单元302,用于对多段代码进行符号化处理,得到多段代码的语法链。
[0135]
例如,处理单元302,具体可以用于当代码文件的类型为伪代码文件时,对代码文件中的伪代码进行调整,得到目标代码,并对目标代码进行符号化处理,得到多段代码的语法链,当代码文件的类型为源代码文件时,将代码文件中的代码作为目标代码,并对目标代码进行符号化处理,得到多段代码的语法链。
[0136]
(3)识别单元303;
[0137]
识别单元302,用于在语法链中识别出待检测应用程序中接收外部数据的至少一数据接收函数。
[0138]
例如,识别单元303,具体可以用于获取预设接收函数的预设函数名称,在代码文件的目标代码的语法链中识别出函数的当前函数名称,将预设函数名称与代码文件中代码的当前函数名称进行匹配,将与预设函数名称匹配成功的目标函数名称对应的数据接收函数作为接收外部数据的至少一数据接收函数。
[0139]
(4)确定单元304;
[0140]
确定单元303,用于根据至少一数据接收函数,在代码文件中确定出外部数据的数据参数。
[0141]
例如,确定单元303,具体可以用于在代码文件中筛选出数据接收函数对应的代码,得到接收函数代码,在接收函数代码中识别出外部数据的数据参数。
[0142]
(5)检测单元305;
[0143]
检测单元305,用于基于数据参数,对代码文件中的代码进行规则扫描,得到待检测应用程序的代码检测结果。
[0144]
例如,检测单元305,具体可以用于在接收函数代码中确定出数据参数对应的目标接收函数代码和调用所述数据参数的第一数据调用函数,根据目标接收函数代码和第一数据调用函数,对代码文件中的代码进行规则扫描,得到待检测应用程序的代码检测结果。
[0145]
具体实施时,以上各个单元可以作为独立的实体来实现,也可以进行任意组合,作为同一或若干个实体来实现,以上各个单元的具体实施可参见前面的方法实施例,在此不再赘述。
[0146]
由以上可知,本实施例在获取单元301获取待检测应用程序的代码文件后,该代码文件包括多段代码,处理单元302对多段代码进行符号化处理,得到多段代码的语法链,然后,识别单元303在语法链中识别出待检测应用程序中接收外部数据的至少一数据接收函数,确定单元304根据至少一数据接收函数,在代码文件中确定出外部数据的数据参数,然后,检测单元305基于数据参数,对代码文件中的代码进行规则扫描,得到待检测应用程序的代码检测结果;由于该方案通过在代码文件中代码的语法链,识别出数据接收函数,然后,通过数据接收函数在代码文件中确定出数据参数,可以准确的对代码文件中使用该数据参数的代码进行规则扫描,属于模拟接收到外部数据的白盒测试,而且无需输入测试数据,因此,可以大大提升应用程序代码检测的检测准确率和检测效率。
[0147]
本发明实施例还提供一种电子设备,如图9所示,其示出了本发明实施例所涉及的电子设备的结构示意图,具体来讲:
[0148]
该电子设备可以包括一个或者一个以上处理核心的处理器401、一个或一个以上计算机可读存储介质的存储器402、电源403和输入单元404等部件。本领域技术人员可以理解,图9中示出的电子设备结构并不构成对电子设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:
[0149]
处理器401是该电子设备的控制中心,利用各种接口和线路连接整个电子设备的各个部分,通过运行或执行存储在存储器402内的软件程序和/或模块,以及调用存储在存储器402内的数据,执行电子设备的各种功能和处理数据,从而对电子设备进行整体监控。可选的,处理器401可包括一个或多个处理核心;优选的,处理器401可集成应用处理器和调
制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器401中。
[0150]
存储器402可用于存储软件程序以及模块,处理器401通过运行存储在存储器402的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器402可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据电子设备的使用所创建的数据等。此外,存储器402可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器402还可以包括存储器控制器,以提供处理器401对存储器402的访问。
[0151]
电子设备还包括给各个部件供电的电源403,优选的,电源403可以通过电源管理系统与处理器401逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源403还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
[0152]
该电子设备还可包括输入单元404,该输入单元404可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。
[0153]
尽管未示出,电子设备还可以包括显示单元等,在此不再赘述。具体在本实施例中,电子设备中的处理器401会按照如下的指令,将一个或一个以上的应用程序的进程对应的可执行文件加载到存储器402中,并由处理器401来运行存储在存储器402中的应用程序,从而实现各种功能,如下:
[0154]
获取待检测应用程序的代码文件,该代码文件包括多段代码,对多段代码进行符号化处理,得到多段代码的语法链,在语法链中识别出待检测应用程序中接收外部数据的至少一数据接收函数,根据至少一数据接收函数,在代码文件中确定出外部数据的数据参数,基于数据参数,对代码文件中的代码进行规则扫描,得到待检测应用程序的代码检测结果。
[0155]
例如,获取待检测应用程序的开发数据,并在开发数据中筛选出初始代码文件,当初始代码文件的类型为源代码文件时,将初始代码文件作为待检测应用程序的代码文件,当初始代码文件的类型为二进制文件时,对初始代码文件进行反编译,得到初始代码文件对应伪代码文件,并将伪代码文件作为待检测应用程序的代码文件,且代码文件的类型为伪代码文件。当代码文件的类型为伪代码文件时,对代码文件中的伪代码进行调整,得到目标代码,并对目标代码进行符号化处理,得到代码文件中多段代码的语法链,当代码文件的类型为源代码文件时,将代码文件中的代码作为目标代码,并对目标代码进行符号化处理,得到代码文件中的多段代码的语法链。获取预设接收函数的预设函数名称,在代码文件的目标代码的语法链中识别出函数的当前函数名称,将预设函数名称与代码文件中代码的当前函数名称进行匹配,将与预设函数名称匹配成功的目标函数名称对应的数据接收函数作为接收外部数据的至少一数据接收函数。在代码文件中筛选出数据接收函数对应的代码,得到接收函数代码,在接收函数代码中识别出外部数据的数据参数。在接收函数代码中确定出数据参数对应的目标接收函数代码和调用所述数据参数的第一数据调用函数,根据目
标接收函数代码和第一数据调用函数,对代码文件中的代码进行规则扫描,得到待检测应用程序的代码检测结果。
[0156]
以上各个操作的具体实施可参见前面的实施例,在此不作赘述。
[0157]
由以上可知,本发明实施例在获取待检测应用程序的代码文件后,该代码文件包括多段代码,对多段代码进行符号化处理,得到多段代码的语法链,然后,在语法链中识别出待检测应用程序中接收外部数据的至少一数据接收函数,根据至少一数据接收函数,在代码文件中确定出外部数据的数据参数,然后,基于数据参数,对代码文件中的代码进行规则扫描,得到待检测应用程序的代码检测结果;由于该方案通过在代码文件中代码的语法链,识别出数据接收函数,然后,通过数据接收函数在代码文件中确定出数据参数,可以准确的对代码文件中使用该数据参数的代码进行规则扫描,属于模拟接收到外部数据的白盒测试,而且无需输入测试数据,因此,可以大大提升应用程序代码检测的检测准确率和检测效率。
[0158]
本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。
[0159]
为此,本发明实施例提供一种计算机可读存储介质,其中存储有多条指令,该指令能够被处理器进行加载,以执行本发明实施例所提供的任一种应用程序代码检测方法中的步骤。例如,该指令可以执行如下步骤:
[0160]
获取待检测应用程序的代码文件,该代码文件包括多段代码,对多段代码进行符号化处理,得到多段代码的语法链,在语法链中识别出待检测应用程序中接收外部数据的至少一数据接收函数,根据至少一数据接收函数,在代码文件中确定出外部数据的数据参数,基于数据参数,对代码文件中的代码进行规则扫描,得到待检测应用程序的代码检测结果。
[0161]
例如,获取待检测应用程序的开发数据,并在开发数据中筛选出初始代码文件,当初始代码文件的类型为源代码文件时,将初始代码文件作为待检测应用程序的代码文件,当初始代码文件的类型为二进制文件时,对初始代码文件进行反编译,得到初始代码文件对应伪代码文件,并将伪代码文件作为待检测应用程序的代码文件,且代码文件的类型为伪代码文件。当代码文件的类型为伪代码文件时,对代码文件中的伪代码进行调整,得到目标代码,并对目标代码进行符号化处理,得到代码文件中多段代码的语法链,当代码文件的类型为源代码文件时,将代码文件中的代码作为目标代码,并对目标代码进行符号化处理,得到代码文件中的多段代码的语法链。获取预设接收函数的预设函数名称,在代码文件的目标代码的语法链中识别出函数的当前函数名称,将预设函数名称与代码文件中代码的当前函数名称进行匹配,将与预设函数名称匹配成功的目标函数名称对应的数据接收函数作为接收外部数据的至少一数据接收函数。在代码文件中筛选出数据接收函数对应的代码,得到接收函数代码,在接收函数代码中识别出外部数据的数据参数。在接收函数代码中确定出数据参数对应的目标接收函数代码和调用所述数据参数的第一数据调用函数,根据目标接收函数代码和第一数据调用函数,对代码文件中的代码进行规则扫描,得到待检测应用程序的代码检测结果。
[0162]
以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
[0163]
其中,该计算机可读存储介质可以包括:只读存储器(rom,read only memory)、随机存取记忆体(ram,random access memory)、磁盘或光盘等。
[0164]
由于该计算机可读存储介质中所存储的指令,可以执行本发明实施例所提供的任一种应用程序代码检测方法中的步骤,因此,可以实现本发明实施例所提供的任一种应用程序代码检测方法所能实现的有益效果,详见前面的实施例,在此不再赘述。
[0165]
其中,根据本技术的一个方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述应用程序代码检测方面的各种可选实现方式中提供的方法。
[0166]
以上对本发明实施例所提供的一种应用程序代码检测方法、装置和计算机可读存储介质进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

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

相关文献