首页 / 专利库 / 软件 / 补丁 / 热补丁 / 一种热补丁加载方法以及装置

一种热补丁加载方法以及装置

阅读:1013发布:2020-06-18

专利汇可以提供一种热补丁加载方法以及装置专利检索,专利查询,专利分析的服务。并且本 发明 提供了一种热 补丁 加载方法以及装置, 热补丁 加载方法包括步骤:获取并记录与热补丁冲突的 内核 态冲突 进程 ; 跟踪 内核态冲突进程,当内核态冲突进程退出内核态时,停止内核态冲突进程的运行;重新加载热补丁;判断重新加载热补丁的结果,当结果为不成功时,循环执行自获取并记录与热补丁冲突的内核态冲突进程的步骤起至重新加载热补丁的步骤;当重新加载热补丁的结果为成功时,恢复所有内核态冲突进程的运行。通过记录与热补丁冲突的内核态冲突进程,并在内核态冲突进程退出内核态时,停止内核态冲突进程的运行,有效降低了热补丁和进程内核函数调用栈的冲突,从而提高热补丁的加载成功率。,下面是一种热补丁加载方法以及装置专利的具体信息内容。

1.一种热补丁加载方法,其特征在于包括步骤:
获取并记录与所述热补丁冲突的内核态冲突进程
跟踪所述内核态冲突进程,当所述内核态冲突进程退出内核态时,停止所述内核态冲突进程的运行;
重新加载所述热补丁;
判断所述重新加载所述热补丁的结果,当结果为不成功时,循环执行自所述获取并记录与所述热补丁冲突的内核态冲突进程的步骤起至所述重新加载所述热补丁的步骤;
当所述重新加载所述热补丁的结果为成功时,恢复所有所述内核态冲突进程的运行。
2.如权利要求1所述的热补丁加载方法,其特征在于,
所述获取并记录与所述热补丁冲突的内核态冲突进程的步骤包括:
在每次循环中获取本次循环中与所述热补丁冲突的所述内核态冲突进程,并持续记录所有循环中的所述内核态冲突进程。
3.如权利要求1或2所述的热补丁加载方法,其特征在于,
在多个进程的内核态函数调用栈中查找所述热补丁函数,获取包括所述热补丁函数的内核态函数调用栈对应的进程的进程标识符,以获取与所述热补丁冲突的内核态冲突进程,
记录所述进程标识符,以记录所述内核态冲突进程。
4.如权利要求1所述的热补丁加载方法,其特征在于,
所述跟踪所述内核态冲突进程,当所述内核态冲突进程退出内核态时,停止所述内核态冲突进程的运行的步骤包括:
跟踪多个所述内核态冲突进程,停止退出内核态的所述内核态冲突进程的运行,直至停止所有所述内核态冲突进程的运行。
5.如权利要求1或4所述的热补丁加载方法,其特征在于,通过ptrace函数跟踪所述内核态冲突进程。
6.如权利要求1所述的热补丁加载方法,其特征在于,
对所有停止的所述内核态冲突进程使用ptrace函数,以使所有所述内核态冲突进程恢复运行。
7.如权利要求1所述的热补丁加载方法,其特征在于,还包括步骤:
计算重新加载所述热补丁的次数,当重新加载所述热补丁的次数达到预设次数时,停止循环执行自所述获取并记录与所述热补丁冲突的内核态冲突进程的步骤起至所述重新加载所述热补丁的步骤,并恢复运行所有所述内核态冲突进程。
8.一种热补丁加载装置,其特征在于包括:
冲突记录单元,用于获取并记录与所述热补丁冲突的内核态冲突进程;
跟踪单元,用于跟踪所述内核态冲突进程,当所述内核态冲突进程退出内核态时,停止所述内核态冲突进程的运行;
加载单元,用于重新加载所述热补丁;
循环单元,用于判断所述重新加载所述热补丁的结果是否成功,当结果为不成功时循环调用所述冲突记录单元、所述跟踪单元以及加载单元;
恢复单元,用于当所述重新加载所述热补丁的结果为成功时,恢复所有所述内核态冲突进程的运行。
9.如权利要求8所述的热补丁加载装置,其特征在于
所述冲突记录单元在每次循环中获取本次循环中与所述热补丁冲突的所述内核态冲突进程,并持续记录所有循环中的所述内核态冲突进程。
10.如权利要求8或9所述的热补丁加载装置,其特征在于
所述冲突记录单元在多个进程内核态函数调用栈中查找所述热补丁函数,获取包括所述热补丁函数的内核态函数调用栈对应的进程的进程标识符,以获取与所述热补丁冲突的内核态冲突进程,记录所述进程标识符,以记录所述内核态冲突进程。
11.如权利要求8所述的热补丁加载装置,其特征在于
所述跟踪单元跟踪多个所述内核态冲突进程,停止退出内核态的所述内核态冲突进程的运行,直至停止所有所述内核态冲突进程的运行。
12.如权利要求8或11所述的热补丁加载装置,其特征在于
所述跟踪单元通过ptrace函数跟踪所述内核态冲突进程。
13.如权利要求8所述的热补丁加载装置,其特征在于,
所述恢复单元对所有停止的所述内核态冲突进程使用ptrace函数,以使所有所述内核态冲突进程恢复运行。
14.如权利要求8所述的热补丁加载装置,其特征在于,还包括:
计数单元,所述计数单元用于计算重新加载所述热补丁的次数,当所述计数单元计数重新加载所述热补丁的次数达到预设次数时,所述循环单元停止循环调用所述冲突记录单元、所述跟踪单元以及加载单元,所述恢复单元恢复所有所述内核态冲突进程的运行。

说明书全文

一种热补丁加载方法以及装置

技术领域

[0001] 本发明涉及软件更新领域,尤其涉及一种热补丁加载方法及装置。

背景技术

[0002] 随着近年来计算技术的迅猛发展,计算机产品的更新换代速度也随之增快。目前,在软件开发过程中,难免存在一些软件设计方面的漏洞或用户对该软件的新的需求,为了不影响软件的使用,一般以热补丁的方式对该软件进行漏洞修复或更新,即在不中止软件的情况下对该软件进行修复或更新。内核热补丁技术是一种对运行中的内核加载热补丁的技术,以避免对操作系统的重启,从而减少重启带来的宕机时间,提高可用性。内核热补丁技术的处理方式基本是以函数为单位的,即可通过对出现漏洞或需要更新的函数进行修复,以实现对内核的修复或更新。
[0003] 当对内核热补丁进行加载时,由于处于内核态的进程需要调用热补丁所涉及的函数,从而与热补丁加载产生冲突,进而导致内核热补丁加载失败。

发明内容

[0004] 针对以上问题,本发明的目的在于提供一种热补丁加载方法以及装置,能够有效减少加载内核热补丁的冲突,提高加载成功率。
[0005] 根据本发明的第一个方面,提供一种热补丁加载方法,包括步骤:获取并记录与热补丁冲突的内核态冲突进程;跟踪内核态冲突进程,当内核态冲突进程退出内核态时,停止内核态冲突进程的运行;重新加载热补丁;判断重新加载热补丁的结果,当结果为不成功时,循环执行自获取并记录与热补丁冲突的内核态冲突进程的步骤起至重新加载热补丁的步骤;当重新加载热补丁的结果为成功时,恢复所有内核态冲突进程的运行。
[0006] 优选地,所述获取并记录与所述热补丁冲突的内核态冲突进程的步骤包括:在每次循环中获取本次循环中与所述热补丁冲突的所述内核态冲突进程,并持续记录所有循环中的所述内核态冲突进程。
[0007] 优选地,在多个进程的内核态函数调用栈中查找所述热补丁函数,获取包括所述热补丁函数的内核态函数调用栈对应的进程的进程标识符,以获取与所述热补丁冲突的内核态冲突进程,记录所述进程标识符,以记录所述内核态冲突进程。
[0008] 优选地,跟踪内核态冲突进程,当内核态冲突进程退出内核态时,停止内核态冲突进程的运行的步骤包括:跟踪多个内核态冲突进程,停止退出内核态的内核态冲突进程的运行,直至停止所有内核态冲突进程的运行。
[0009] 优选地,通过ptrace函数跟踪内核态冲突进程。
[0010] 优选地,对所有停止的内核态冲突进程使用ptrace函数,以使所有内核态冲突进程恢复运行。
[0011] 优选地,第一个方面的热补丁加载方法还包括步骤:计算重新加载热补丁的次数,当重新加载热补丁的次数达到预设次数时,停止循环执行自获取并记录与热补丁冲突的内核态冲突进程的步骤起至重新加载热补丁的步骤,并恢复运行所有内核态冲突进程。
[0012] 根据本发明的第二个方面,提供一种热补丁加载装置,包括:冲突记录单元,用于获取并记录与热补丁冲突的内核态冲突进程;跟踪单元,用于跟踪内核态冲突进程,当内核态冲突进程退出内核态时,停止内核态冲突进程的运行,以及恢复所有内核态冲突进程的运行;加载单元,用于重新加载热补丁;循环单元,用于判断重新加载热补丁的结果是否成功,当结果为不成功时循环调用冲突记录单元、跟踪单元以及加载单元;恢复单元,用于当重新加载热补丁的结果为成功时,恢复所有内核态冲突进程的运行。
[0013] 优选地,所述冲突记录单元在每次循环中获取本次循环中与所述热补丁冲突的所述内核态冲突进程,并持续记录所有循环中的所述内核态冲突进程。
[0014] 优选地,所述冲突记录单元在多个进程内核态函数调用栈中查找所述热补丁函数,获取包括所述热补丁函数的内核态函数调用栈对应的进程的进程标识符,以获取与所述热补丁冲突的内核态冲突进程,记录所述进程标识符,以记录所述内核态冲突进程。
[0015] 优选地,跟踪单元跟踪多个内核态冲突进程,停止退出内核态的内核态冲突进程的运行,直至停止所有内核态冲突进程的运行。
[0016] 优选地,跟踪单元通过ptrace函数跟踪内核态冲突进程。
[0017] 优选地,恢复单元对所有停止的内核态冲突进程使用ptrace函数,以使所有内核态冲突进程恢复运行。
[0018] 优选地,上述第二方面的热补丁加载装置还包括计数单元,计数单元用于计算重新加载热补丁的次数,当计数单元计数重新加载热补丁的次数达到预设次数时,循环单元停止循环调用冲突记录单元、跟踪单元以及加载单元,恢复单元恢复所有内核态冲突进程的运行。
[0019] 本发明获取并记录与热补丁冲突的内核态冲突进程,并在内核态冲突进程退出内核态时,停止内核态冲突进程的运行,在此基础上重新加载热补丁,通过这样的方法,在下一次加载热补丁时,能够降低内核态进程与热补丁之间的冲突,从而提高加载热补丁的成功率。附图说明
[0020] 以下结合附图和具体实施例对本发明的技术方案进行详细的说明,以使本发明的特性和优点更为明显。
[0021] 图1为现有技术中的热补丁加载方法的流程图
[0022] 图2为本发明的热补丁加载方法的第一实施例的流程图;
[0023] 图3为本发明的热补丁加载方法的第二实施例的流程图;
[0024] 图4为本发明的热补丁加载装置的一个实施例的模示意图。

具体实施方式

[0025] 以下将对本发明的实施例给出详细的说明。尽管本发明将结合一些具体实施方式进行阐述和说明,但需要注意的是本发明并不仅仅只局限于这些实施方式。相反,对本发明进行的修改或者等同替换,均应涵盖在本发明的权利要求范围当中。
[0026] 一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各项操作描述成顺序的处理,但是其中的许多操作可以被并行地、并发地或者同时实施。此外,各项操作的顺序可以被重新安排。当其操作完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。所述处理可以对应于方法、函数、规程、子例程、子程序等等。
[0027] 图1为现有技术中的热补丁加载方法的流程图,通过图1对热补丁加载方法进行介绍。
[0028] 通常而言,热补丁技术由制作热补丁和加载热补丁两个部分组成,其中制作热补丁的方法使用现有技术中的方法,例如ksplice技术中,首先获取一份运行中内核对应的源码并编译出二进制,称为pre对象,打上源码补丁再次编译后,称为post对象,对post对象和pre对象逐条指令比较并找出存在差异的函数,之后把这些差异函数合并为内核模块形式的热补丁。
[0029] 对于加载热补丁,如图1所示,现有技术中首先执行步骤S201,编译热补丁函数,即通过编译器将热补丁函数编译为二进制。接着如步骤S202,加载热补丁至操作系统内存。然后如步骤S203,判断进程的内核态函数调用栈中是否存在热补丁函数。具体而言,遍历操作系统中所有进程的内核态函数调用栈,并在内核态函数调用栈中查找是否存在热补丁函数。若内核态函数调用栈中不存在热补丁函数,则继续执行步骤S205,依据热补丁函数对应的原函数地址改变原函数的指令,以使得执行原函数时能够跳转执行热补丁函数。接着,如步骤S206,执行原函数,并通过原函数跳转执行热补丁函数,执行完成后通过热补丁函数返回。完成以上步骤后,则进入步骤S207热补丁加载成功。
[0030] 若在步骤S203中,内核态函数调用栈中包括热补丁函数,该包括热补丁函数的内核态函数调用栈对应的进程即为内核态冲突进程,由于存在内核态冲突进程,则在对热补丁函数进行更新时容易发生系统崩溃,为了保持操作系统稳定性,则进入步骤S204热补丁加载失败。
[0031] 现有技术当进入步骤S204后,会通知用户导致失败的内核态冲突进程,用户可以通过多次尝试加载热补丁,以期待在某个加载时间点没有任何进程的内核函数调用栈包括热补丁函数。然而,对于频繁使用的内核函数如schedule,hrtimer以及经常处于内核函数调用栈顶部的函数如sys_poll,sys_read,这两种类型的内核函数则难以进行热补丁加载。
[0032] 图2为本发明的热补丁加载方法的第一实施例的流程图。
[0033] 本发明在现有技术的基础上进行改进,如图2所示,在本发明的一个实施例中,当进入步骤S204热补丁加载失败时,执行以下步骤:
[0034] S101:获取并记录与热补丁冲突的内核态冲突进程。
[0035] S102:跟踪内核态冲突进程,当内核态冲突进程退出内核态时,停止运行内核态冲突进程。
[0036] S103:重新加载热补丁。
[0037] S104:判断重新加载的结果是否成功。
[0038] S106:恢复所有内核态冲突进程的运行。
[0039] 具体而言,结合图1以及图2,承接现有技术中的步骤S201,S202,S203以及S204,在现有技术的步骤S203中,在遍历操作系统中所有进程的内核态函数调用栈,并在内核态函数调用栈中查找到热补丁函数时,则该包括热补丁函数的内核态函数调用栈所对应的进程即为内核态冲突进程,此时如步骤S204,补丁加载失败,接着进入步骤S101,获取并记录与热补丁冲突的内核态冲突进程,即在多个进程的内核态函数调用栈中查找所述热补丁函数,获取包括热补丁函数的内核态函数调用栈对应的进程,即内核态冲突进程的进程标识符(PID),记录进程标识符。
[0040] 作为一种可选的实施方式,在步骤S101中,在获取内核态冲突进程时,在每次循环中获取本次循环中与热补丁冲突的内核态冲突进程,而在记录内核态冲突进程时,则持续记录所有循环中的内核态冲突进程。
[0041] 通过这样的方式,能够在后续步骤S102中有效停止所有被记录的内核态冲突进程,即使在不同循环中出现不同的内核态冲突进程,也能够有效停止,从而减少热补丁冲突,提高加载成功率。
[0042] 在其他实施例中,也可以仅记录本次循环中与热补丁冲突的内核态冲突进程。
[0043] 接着如步骤S102,跟踪内核态冲突进程,当内核态冲突进程退出内核态时,停止运行内核态冲突进程。具体而言,使用ptrace函数以跟踪内核态冲突进程,并当内核态冲突进程退出内核态时,将上述内核态冲突进程停止在用户态。ptrace函数是Linux系统的系统函数,提供了一种使父进程得以监视和控制其它进程的方式,可以实现断点调试和系统调用的跟踪。使用ptrace函数,实现在用户层拦截和修改系统调用,ptrace函数包括了ptrace_attach函数,ptrace_syscall函数以及ptrace_detach函数。具体而言,对步骤S101中记录的进程标识符使用ptrace_attach函数而对于该进程标识符对应的内核态冲突进程进行跟踪,对步骤S101中记录的进程标识符使用ptrace_syscall函数,从而当内核态冲突进程退出内核态进入用户态时,将该进入用户态的内核态冲突进程停止在用户态。
[0044] 由于内核态冲突进程退出内核态后被停止在用户态,因此,有效地防止了该内核态冲突进程重新从用户态进入内核态,从而降低了与热补丁冲突的概率。
[0045] 作为一种可选的实施方式,当存在多个内核态冲突进程时,跟踪多个内核态冲突进程,一旦内核态冲突进程退出内核态即停止该内核态冲突进程的运行,直至停止所有内核态冲突进程的运行。相对于停止部分内核态冲突进程,这样的方式能够更好地保证减少与热补丁的冲突。
[0046] 在其他实施例中,可以跟踪多个内核态冲突进程,并在限定时间范围内停止内核态冲突进程的运行。也可以对内核态冲突进程设置权重,当一定权重值的内核态冲突进程全部被停止运行时,进入步骤S103。
[0047] 接着,如步骤S103,重新加载热补丁。具体而言,重新执行如图1所示的现有技术的加载方法,即进入步骤S203,并执行步骤S203之后的步骤S205至步骤S207,或者执行步骤S203之后的步骤S204。
[0048] 对于热补丁的加载方法可以使用如图1所示的现有技术,在其他实施例中,也可以使用其他现有的热补丁加载方法。
[0049] 当重新加载热补丁后,仍然可能产生两种结果,即步骤S207热补丁加载成功以及步骤S204热补丁加载失败。
[0050] 完成重新加载热补丁后,接着执行步骤S104,判断重新加载热补丁的结果是否成功,当结果为成功时,则执行步骤S106。当结果为不成功时,循环执行自步骤S101起的步骤。
[0051] 最后,如步骤S106,恢复所有内核态冲突进程的运行。具体而言,当在步骤S104中判断重新加载成功时结束循环,恢复所有内核态冲突进程的运行。对所有内核态冲突进程使用ptrace_detach函数,以使所有内核态冲突进程恢复运行。
[0052] 图3为本发明的热补丁加载方法的第二实施例的流程图,图3所示的第二实施例在第一实施例的基础上增加了步骤S105,增加设置了加载计数器,并在步骤S103中,增加控制加载计数器减1。具体而言,预先设置加载次数的阈值,并设置加载计数器,使加载计数器的初始值为加载次数的阈值。每当重新加载热补丁,则将加载计数器减1。通过对加载次数的设定,能够有效限制加载热补丁的最多尝试次数,从而防止无限循环。
[0053] 在第二实施例中,在步骤S104后还包括步骤S105,即当判断热补丁重新加载不成功时,执行步骤S105,计算重新加载热补丁的次数,当重新加载热补丁的次数达到预设次数,即加载计数器为0时,执行步骤S106。当判断加载计数器不为0时,则循环执行自步骤S101起的步骤。
[0054] 通过对热补丁重新加载次数的控制,保证了对热补丁重新加载仅会被执行预设的次数,而不会因为持续加载失败而无限循环,保证了热补丁加载的效率。本实施例中是将加载计数器初始值设为阈值,每次尝试加载热补丁则减1,在其他实施例中也可以从0开始累加计算加载次数,当判断重新加载次数达到预设次数时,结束循环,进入步骤S106。
[0055] 需要注意的是,如本实施中,在步骤S104后执行步骤S105,在其他实施例中,也可以在步骤S104之前执行步骤S105或在执行步骤S104的同时执行S105。例如,可以在步骤S103之前执行步骤S105。
[0056] 在本实施例中通过对重新加载热补丁的次数作出限制从而提高热补丁的加载效率,在其他实施例中,也可以设置热补丁加载时间阈值,即当重新加载热补丁超出预设的时间阈值时,停止循环并执行步骤S106恢复所有内核态冲突进程的运行。
[0057] 在本实施例的步骤S106中,当在步骤S104中判断重新加载的结果为成功时,或是在步骤S105中判断加载计数器为0时,结束循环,恢复所有内核态冲突进程的运行。
[0058] 本发明还提供一种热补丁加载装置1,图4为本发明的热补丁加载装置的一个实例的模块示意图。
[0059] 如图4所示,本发明的热补丁加载装置1包括冲突记录单元102,冲突执行单元104,加载单元101、循环单元103以及计数单元105。
[0060] 其中,冲突记录单元102用于获取并记录与热补丁冲突的内核态冲突进程。
[0061] 冲突执行单元104包括跟踪单元1041以及恢复单元1042。跟踪单元1041用于跟踪内核态冲突进程,当内核态冲突进程退出内核态时,停止内核态冲突进程的运行。恢复单元1042用于当重新加载热补丁的结果为成功时,恢复所有内核态冲突进程的运行。冲突执行单元104可以调用ptrace函数,跟踪单元1041使用ptrace_attach函数以及ptrace_syscall函数,恢复单元1042使用ptrace_detach函数。加载单元101用于重新加载热补丁。
[0062] 循环单元103用于判断重新加载热补丁的结果是否成功,当不成功时循环调用冲突记录单元102以及冲突执行单元104。
[0063] 计数单元105用于计算重新加载所述热补丁的次数。
[0064] 结合图1、图3以及图4,本实施例中的热补丁加载装置1当热补丁加载失败时,通过冲突记录单元102执行步骤S101,获取并记录与热补丁冲突的内核态冲突进程。
[0065] 接着,冲突执行单元104的跟踪单元1041使用ptrace_attach函数跟踪内核态冲突进程,使用ptrace_syscall函数,从而当内核态冲突进程退出内核态进入用户态时,将该进入用户态的内核态冲突进程停止在用户态。
[0066] 然后,加载单元101执行步骤S103重新加载热补丁,计数单元105执行步骤S103控制加载计数器减1。
[0067] 接着,循环单元103执行步骤S104判断重新加载热补丁的结果是否成功,当判断结果为成功时,则由冲突执行单元104的恢复单元1043执行步骤S106。当判断不成功时,循环单元103执行步骤S105判断重新加载热补丁的次数是否达到预设次数,当加载计数器为0时,循环单元103停止循环调用冲突记录单元102、跟踪单元1041以及加载单元101,并由恢复单元1043执行步骤S106。当循环单元103判断加载计数器不为0时,则循环调用冲突记录单元102、跟踪单元1041以及加载单元101,从而循环执行自步骤S101起的步骤。
[0068] 根据上述对热补丁加载方法的描述,也可以省略计数单元105,循环单元103仅根据重新加载热补丁是否成功而决定是否执行自步骤S101起的步骤。
[0069] 对于各单元具体执行上述的步骤的方法,可以参看上述对热补丁加载方法的描述,此处不再赘述。
[0070] 本发明所提供的热补丁加载方法以及热补丁加载装置1,通过记录与热补丁冲突的内核态冲突进程,并在内核态冲突进程退出内核态时,停止内核态冲突进程的运行,在此基础上重新加载热补丁,从而有效降低热补丁进程和进程内核函数调用栈的冲突,从而提高热补丁的加载成功率。
[0071] 通过计算加载热补丁的次数,当加载述热补丁的次数达到预设次数时,停止循环,并使所有内核态冲突进程恢复运行,从而防止无限循环,提高加载效率。
[0072] 需要说明的是,本发明是热补丁加载的一种应用。在本发明的实现过程中,会涉及到多个软件功能模块的应用。如在仔细阅读申请文件、准确理解本发明的实现原理和发明目的以后,在结合现有公知技术的情况下,本领域技术人员完全可以运用其掌握的软件编程技能实现本发明。前述热补丁加载装置还包括但不限于编译单元,修改单元等,凡本发明申请文件提及的均属此范畴,申请人不再一一列举。
[0073] 以上仅是本发明的具体应用范例,对本发明的保护范围不构成任何限制。除上述实施例外,本发明还可以有其它实施方式。凡采用等同替换或等效变换形成的技术方案,均落在本发明所要求保护的范围之内。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈