内存检测方法、装置、设备及存储介质与流程

文档序号:31407846发布日期:2022-09-03 07:43阅读:142来源:国知局
内存检测方法、装置、设备及存储介质与流程

1.本说明书一个或多个实施例涉及计算机技术领域,尤其涉及一种内存检测方法、装置、设备及存储介质。


背景技术:

2.在应用程序访问了操作系统的非法内存地址时会触发宕机,然而由于所获取的信息通常不是第一现场,引起异常访问的原因以及异常访问的具体类型难以排查。
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.在一些实施例中,所述内存组包括多个内存块,所述内存保护模块具体用于:
30.在所述内存块中间隔设置多个第一保护区域,其中,所述第一保护区域为不可访问区域;
31.在两个第一保护区域之间设置第二保护区域和有效内存区域,其中,所述第二保护区域中填充设定数值,且所述第二保护区域和所述有效内存区域随机排列。
32.在一些实施例中,所述内存分配模块具体用于:
33.对所述待检测系统内核中的内存申请接口进行钩子操作;
34.在所述应用程序调用所述内存申请接口的情况下,通过自定义函数使所述应用程序对所述内存组进行内存申请。
35.在一些实施例中,所述异常检测模块具体用于:
36.确定所述异常访问所访问的内存块;
37.将所述内存块所分配的应用程序确定为进行异常访问的目标应用程序。
38.在一些实施例中,所述异常检测模块具体用于:
39.确定所述异常访问所访问的区域;
40.根据所访问区域的读写保护类型,确定所述异常访问的类型和调用栈。
41.根据本说明书一个或多个实施例的第三方面,提出了一种计算设备,包括:
42.处理器;
43.用于存储处理器可执行指令的存储器;
44.其中,所述处理器通过运行所述可执行指令以实现任一实施例所述的方法。
45.根据本说明书一个或多个实施例的第四方面,提出了计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现任一实施例所述的方法。本技术中内存检测装置加载在待检测系统的内核中,通过从所述待检测系统申请内存组,将所述内存组划
分为多种类型的区域,每个类型的区域具有不同的读写保护设置,响应于接收到应用程序的内存申请,将所述内存组中的内存块分配给所述应用程序,在所述内存组受到异常访问的情况下,根据所访问的内存组中的位置,确定进行异常访问的目标应用程序以及所述异常访问的类型,能够捕获因应用程序对于内存的异常访问而引起的系统宕机的第一现场,无需重启计算机即可确定异常访问的类型和调用栈。
附图说明
46.图1是一示例性实施例提供的一种异常检测方法的流程图。
47.图2是一示例性实施例提供的一种内存块保护设置的示意图。
48.图3是一示例性实施例提供的一种异常检测装置的框图。
49.图4是一示例性实施例提供的一种计算设备的结构示意图。
具体实施方式
50.这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。
51.需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
52.在应用程序访问了操作系统的非法内存地址时会引发系统宕机,然而由于所获取的信息通常不是第一现场,引起异常访问的原因以及异常访问的具体类型难以排查。
53.目前的内存检测工具通常是通过宕机时转存内存快照排查对于内存的非法访问,需要重启计算机,无法捕获宕机的第一现场。
54.有鉴于此,本技术提供了一种内存检方法,用于对操作系统中非法访问内存地址的具体原因和异常访问类型进行检测,该异常检测方法可以由安装在操作系统内核中的内存检测装置执行。
55.参见图1,图1是一示例性实施例提供的一种异常检测方法的流程图,该方法包括:
56.步骤101、从所述待检测系统申请内存组。
57.在本步骤中,待检测系统的内核管理装置可以通过内存申请接口接收内存申请,并将所请求的内存组分配给所述内存检测装置。其中,所分配的内存组通常包括多个内存块。
58.在本公开实施例中,可以向待检测系统批量申请内存组,以供后续步骤使用。
59.步骤102、将所述内存组划分为多种类型的区域,每个类型的区域具有不同的读写保护设置。
60.具体地,可以将所述内存组的每个内存块划分为多种类型的区域,每个类型的区
域具有不同的读写保护设置。例如,可以将其中一种类型设置为不可读写,在该区域被应用程序访问时即引起硬件中断;将另一种类型设置为可读写,也即可以正存访问的内存区域;还可以设置其他类型的读写保护,以使得应用程序在访问到不同的区域时会产生不同的结果。本领域技术人员应当理解,不同区域的读写保护类型可以根据实际需求进行具体设置,本公开对此不进行限定。
61.步骤103、响应于接收到应用程序的内存申请,将所述内存组中的内存块分配给所述应用程序。
62.通过将被内存检测装置进行保护设置的内组存中的一个或多个内存块分配给应用程序,则应用程序在运行时对进行了保护设置的内存块进行访问。
63.步骤104、在所述内存组受到异常访问的情况下,根据所访问的内存地址,确定进行异常访问的目标对象,所述目标对象包括引起异常访问的目标应用程序、所述异常访问的类型、所述异常访问的调用栈中的至少一种。
64.在内存组受到异常访问而导致硬件中断的情况下,则触发对于引起该中断的原因的判断。由于内存组中的内存块分配给不同的应用程序,因此可以根据被访问的内存块确定进行异常访问的应用程序和调用栈;又由于在内存块中设置了不同类型的读写保护,因此可以根据被访问的内存块中的区域确定异常访问的类型和调用栈,无需在重启操作系统后再根据内存快照来排查引起硬件中断的具体原因。
65.本技术通过加载在待检测系统的内核中的内存检测装置从所述待检测系统申请内存组,将所述内存组划分为多种类型的区域,每个类型的区域具有不同的读写保护设置,响应于接收到应用程序的内存申请,将所述内存组中的内存块分配给所述应用程序,在所述内存组受到异常访问的情况下,根据所访问的内存地址,确定进行异常访问的目标对象,能够捕获因应用程序对于内存的异常访问而引起的系统宕机的第一现场,无需重启计算机即可确定异常访问的类型和调用栈。
66.在介绍了本技术的基本实现过程之后,下面结合本技术的多个可选实施例,对本技术所提供的异常检测方法进行进一步说明。
67.相关技术中,能常利用操作系统内核自带的内存检测工具进行内存检测。然而,这类内存检测工具对于操作系统的性能损耗很大,因此正式发布版本在操作系统运行过程中是关闭的如果要使用该内核自带的内存检测功能,需要使用调试版本,并重启机器再复现问题。
68.为了解决上述问题,本公开实施例以可加载内核模块的方式将内存检测装置加载至所述待检测系统的内核中。
69.可加载内核模块可以动态地加载到内存中,无须重新编译内核,也无须重启机器即能够捕获宕机版本。并且,可加载内核模块相较于内核自带的内存检测工具,其不具有强行插入检测指令,对于操作系统的性能损耗低,并且可以兼容各种内核版本,可以直接用于线上环境问题检测,突破了操作系统中内存排查的瓶颈。
70.在一些实施例中,可以通过以下方式来对内存组中的内存块进行保护设置:在所述内存块中间隔设置多个第一保护区域,其中,所述第一保护区域为不可访问区域;在两个第一保护区域之间设置第二保护区域和有效内存区域,其中,所述第二保护区域中填充设定数值,且所述第二保护区域和所述有效内存区域随机排列。
71.图2是一示例性实施例提供的一种内存块保护设置的示意图。如图2所示,可以在所述内存块的两端以及中间部分别设置第一保护区域,也即在所述内存块中,间隔设置多个第一保护区域,每个第一保护区域被设置为不可访问。当所述第一保护区域被应用程序访问时,则会引起硬件中断,触发对于异常访问类型的判断。
72.在两个第一保护区域之间设置第二保护区域和有效内存区域。其中,所述第二保护区域中填充设定数值,也可以将该设定数值称为哨兵值。在所述第二保护区域中的设定数值被改变的情况下,也会引起硬件中断,触发对于异常访问类型的判断。
73.所述有效内存区域在被分配给应用程序的状态下,也即分配状态下,是可以被该应用程序正常访问的,然而当该有效内存区域处于释放状态下,如果被应用程序访问,也会引起硬件中断。
74.在一些实施例中,可以将两个第一保护区域之间的第二保护区域和有效内存区域随机排列的。假设一个应用程序在两次内存申请中所分配地的内存地址中,有效内存区域的地址就可能是变化的。这样更有利于检测到应用程序的异常访问。
75.本领域技术人员应当理解,图2所示的第一保护区域的设置数目仅为示例,也可以根据实际需要设置其他数目的第一保护区域。
76.在本公开实施例中,通过对内存组上的各个内存块进行间隔读写保护设置,并在读写保护区域之间随机设置填充设定值的区域和有效内存区域,使得应用程序在非法访问这些区域时,会引起硬件的中断,从而触发对于异常访问类型的判断。无需在重新启动操作系统后复现问题来诊断异常访问类型。
77.在一些实施例中,可以通过以下方式将所述内存组中的内存块分配给所述应用:对所述待检测系统内核中的内存申请接口进行钩子操作,也即劫持所述内存申请接口;在所述应用程序调用所述内存申请接口的情况下,通过自定义函数使所述应用程序对所述内存组进行内存申请。
78.通过将进行了本公开实施例所提出的读写保护设置的内存块分配给进行内存申请的应用程序,可以实现对于应用程序对于内存的异常访问检测,并且不造成操作系统的性能损耗。
79.在一些实施例中,可以根据所访问的内存组中的位置,确定进行异常访问的目标应用程序。
80.具体地,首先确定所述异常访问所访问的内存块。由于所述内存组中的内存块是分配个不同的应用程序的,因此在确定了异常地址所指向的内存块时,即可确定出进行异常访问的目标应用程序,也即,可以将所述内存块所分配的应用程序确定为进行异常访问的目标应用程序。
81.在一些实施例中,可以所述根据所访问的内存组中的位置,确定所述异常访问的类型。
82.具体地,首先确定所述异常访问所访问的区域。由于所述内存块中设置了不同读写保护类型的区域,因此异常访问是由于应用程序对这些区域的非法访问引起的。因此,根据所访问区域的读写保护类型,可以确定所述异常访问的类型和调用栈。
83.举例来说,在异常访问所访问的地址为所述第一保护区域的情况下,则可以判断出异常访问类型是内存越界故障。内存越界故障是指应用程序在申请了内存后,在使用内
存时超出了合法申请的范围。
84.在异常访问所访问的地址为所述第二保护区域的情况下,同样可以判断出异常访问类型是内存越界故障。
85.在确定了所访问的地址为处于释放状态的有效内存区域时,则可以判断出异常访问的类型为use after free(uaf)漏洞。
86.在一些实施例中,对于内存块中的各个区域,还可以标记所述区域处于分配状态还是释放状态。如果访问的内存区域中的值指示处于释放状态的值,则可以确定异常访问的类型是内存的重复释放。
87.以上对于异常访问类型的判断仅为示例,还可以根据各个区域的不同状态和读写保护类型的配合实现对其他异常访问类型的判断,本公开对此不进行限制。
88.在根据所访问区域的读写保护类型确定所述异常访问的调用栈后,即可清楚异常访问的路径,有利于追溯引起异常访问的根本原因。
89.在一些实施例中,在确定进行异常访问的目标应用程序以及所述异常访问的类型之后,重启操作系统,并在重启后对所得到的异常访问进行显示。
90.与前述方法的实施例相对应,本说明书还提供了内存检测装置的实施例。参见图3,图3是一示例性实施例提供的一种异常检测装置的框图,该装置加载在待检测系统的内核中,所述装置包括:
91.内存申请模块301,用于从所述待检测系统申请内存组。其中,内存申请模块301还可用于内存的批量申请、释放、快速\随机分配内存。
92.内存保护模块302,用于将所述内存组划分为多种类型的区域,每个类型的区域具有不同的读写保护设置。
93.具体地,可以将所述内存组的每个内存块划分为多种类型的区域,每个类型的区域具有不同的读写保护设置。例如,可以将其中一种类型设置为不可读写,在该区域被应用程序访问时即引起硬件中断;将另一种类型设置为可读写,也即可以正存访问的内存区域;还可以设置其他类型的读写保护,以使得应用程序在访问到不同的区域时会产生不同的结果。本领域技术人员应当理解,不同区域的读写保护类型可以根据实际需求进行具体设置,本公开对此不进行限定。
94.内存分配模块303,用于响应于接收到应用程序的内存申请,将所述内存组中的内存块分配给所述应用程序。
95.通过将被内存保护模块302进行保护设置的内组存中的一个或多个内存块分配给应用程序,则应用程序在运行时对进行了保护设置的内存块进行访问。
96.异常检测模块304,用于在所述内存组受到异常访问的情况下,根据所访问的内存地址,确定进行异常访问的目标对象,所述目标对象包括引起异常访问的目标应用程序、所述异常访问的类型、所述异常访问的调用栈中的至少一种。
97.在内存组受到异常访问而导致硬件中断的情况下,则触发对于引起该中断的原因的判断。由于内存组中的内存块分配给不同的应用程序,因此可以根据被访问的内存块确定进行异常访问的应用程序和调用栈;又由于在内存块中设置了不同类型的读写保护,因此可以根据被访问的内存块中的区域确定异常访问的类型和调用栈,无需在重启操作系统后再根据内存快照来排查引起硬件中断的具体原因。
98.在一些实施例中,所述装置以可加载内核模块加载至所述待检测系统的内核中。
99.可加载内核模块可以动态地加载到内存中,无须重新编译内核,也无须重启机器即能够捕获宕机版本。并且,可加载内核模块相较于内核自带的内存检测工具,其不具有强行插入检测指令,对于操作系统的性能损耗低,并且可以兼容各种内核版本,可以直接用于线上环境问题检测,突破了操作系统中内存排查的瓶颈。
100.在一些实施例中,所述内存组包括多个内存块,所述内存保护模块具体用于:
101.在所述内存块中间隔设置多个第一保护区域,其中,所述第一保护区域为不可访问区域;
102.在两个第一保护区域之间设置第二保护区域和有效内存区域,其中,所述第二保护区域中填充设定数值,且所述第二保护区域和所述有效内存区域随机排列。
103.在本公开实施例中,通过对内存组上的各个内存块进行间隔读写保护设置,并在读写保护区域之间随机设置填充设定值的区域和有效内存区域,使得应用程序在非法访问这些区域时,会引起硬件的中断,从而触发对于异常访问类型的判断。无需在重新启动操作系统后复现问题来诊断异常访问类型。
104.在一些实施例中,所述装置还包括钩子模快305,用于:
105.对所述待检测系统内核中的内存申请接口进行钩子操作,也即劫持所述内存申请接口;
106.在所述应用程序调用所述内存申请接口的情况下,通过自定义函数使所述应用程序对所述内存组进行内存申请。
107.通过将进行了本公开实施例所提出的读写保护设置的内存块分配给进行内存申请的应用程序,可以实现对于应用程序对于内存的异常访问检测,并且不造成操作系统的性能损耗。
108.在一些实施例中,所述异常检测模块具体用于:
109.确定所述异常访问所访问的内存块;
110.将所述内存块所分配的应用程序确定为进行异常访问的目标应用程序。
111.在一些实施例中,所述异常检测模块具体用于:
112.确定所述异常访问所访问的区域;
113.根据所访问区域的读写保护类型,确定所述异常访问的类型和调用栈。
114.举例来说,在异常访问所访问的地址为所述第一保护区域的情况下,则可以判断出异常访问类型是内存越界故障。内存越界故障是指应用程序在申请了内存后,在使用内存时超出了合法申请的范围。
115.在异常访问所访问的地址为所述第二保护区域的情况下,同样可以判断出异常访问类型是内存越界故障。
116.在确定了所访问的地址为处于释放状态的有效内存区域时,则可以判断出异常访问的类型为use after free(uaf)漏洞。
117.在一些实施例中,对于内存块中的各个区域,还可以标记所述区域处于分配状态还是释放状态。如果访问的内存区域中的值指示处于释放状态的值,则可以确定异常访问的类型是内存的重复释放。
118.以上对于异常访问类型的判断仅为示例,还可以根据各个区域的不同状态和读写
保护类型的配合实现对其他异常访问类型的判断,本公开对此不进行限制。
119.在根据所访问区域的读写保护类型确定所述异常访问的调用栈后,即可清楚异常访问的路径,有利于追溯引起异常访问的根本原因。
120.在一些实施例中,在确定进行异常访问的目标应用程序以及所述异常访问的类型之后,重启操作系统,并在重启后对所得到的异常访问进行显示。
121.上述装置中各个模块的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
122.对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
123.图4是一示例性实施例提供的一种设备的示意结构图。请参考图4,在硬件层面,该设备包括处理器702、内部总线404、网络接口406、内存408以及非易失性存储器410,当然还可能包括其他业务所需要的硬件。本说明书一个或多个实施例可以基于软件方式来实现,比如由处理器402从非易失性存储器410中读取对应的计算机程序到内存408中然后运行。当然,除了软件实现方式之外,本说明书一个或多个实施例并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
124.上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
125.在一个典型的配置中,计算机包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。
126.内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flash ram)。内存是计算机可读介质的示例。
127.计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
128.还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
129.上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
130.在本说明书一个或多个实施例使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
131.应当理解,尽管在本说明书一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在
……
时”或“当
……
时”或“响应于确定”。
132.以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1