本申请涉及网络安全防护技术领域,更具体的说,是涉及一种恶意代码检测方法及装置。
背景技术:
随着网络和计算机技术的快速发展,linux操作系统逐渐被越来越多的网络用户所使用,linux操作系统下的网络安全问题受到越来越多的关注。当前,linux操作系统下的网络安全问题多由攻击者将恶意代码(比如,病毒、蠕虫、后门程序等)植入linux操作系统的程序内造成的,为了避免恶意代码对linux操作系统下的网络安全造成威胁,通常需要对植入linux操作系统的程序内的恶意代码进行防护。
现有技术中,常用的恶意代码的防护方式主要有以下两种:
第一种,基于恶意代码的特征码来检测植入linux操作系统的程序内的恶意代码。恶意代码的特征码是从已知恶意代码中提取的能够代表一类恶意代码的一系列字节,多种恶意代码的特征码组成恶意代码的特征库。基于恶意代码的特征码检测,即,利用恶意代码的特征库与linux操作系统的程序进行对比匹配,从而判断linux操作系统的程序内是否植入了恶意代码。但是,针对未知恶意代码,以及,由已知恶意代码变形后生成的恶意代码,这种检测方式无法检测出,进而无法避免恶意代码对linux操作系统下的网络安全问题造成威胁。
第二种,预设白名单程序,攻击者如果对白名单程序之外的其他程序植入了恶意代码,这些程序由于不在白名单程序之列,恶意代码将被不允许执行,因此,可以避免恶意代码对linux操作系统下的网络安全问题造成威胁,但是,如果攻击者对白名单程序植入恶意代码,恶意代码将被允许执行,这种情况下,将无法避免恶意代码对linux操作系统下的网络安全问题造成威胁。
可见,现有的恶意代码的防护方式对于无法部分恶意代码无法防护,导致恶意代码的防护可靠性较低,因此,如何提高恶意代码的防护的可靠性,成为需要本领域技术人员解决的技术问题。
技术实现要素:
鉴于上述问题,提出了本申请以便提供一种克服上述问题或者至少部分地解决上述问题的恶意代码检测方法及装置。具体方案如下:
一种恶意代码检测方法,所述方法包括:
获取linux操作系统的程序被执行过程中对敏感函数的调用路径;
当所述调用路径为敏感路径时,确定所述linux操作系统的程序中存在恶意代码的威胁;
其中,所述敏感函数为可以访问linux操作系统的资源的函数,和/或,可以改变linux操作系统的状态的函数;
所述敏感路径为除linux操作系统设置的对所述敏感函数的正常调用路径之外的调用路径。
优选地,所述方法还包括:
在获取linux操作系统的程序被执行过程中对敏感函数的调用路径之前,对linux操作系统的程序中的所述敏感函数以及所述敏感路径中所用到的函数进行插桩,得到插桩后的linux操作系统的程序。
优选地,所述获取敏感函数在linux操作系统的程序被执行过程中的调用路径,包括:
在所述插桩后的linux操作系统的程序被执行过程中,对所述敏感函数以及所述敏感路径中所用到的函数的调用进行跟踪,获取敏感函数在linux操作系统的程序被执行过程中的调用路径。
优选地,所述方法还包括:
在所述对linux操作系统的程序中的所述敏感函数以及所述敏感路径中所用到的函数进行插桩之前,确定所述敏感函数以及确定所述敏感路径。
优选地,所述确定所述敏感函数,包括:
确定linux操作系统的程序中的文件操作函数、创建进程函数、内存操作函数、网络访问函数以及系统相关函数为敏感函数;
所述文件操作函数包括open函数、openat函数、openat64函数、read函数、pread函数、write函数以及writev函数中的任意一个或多个;
所述创建进程函数包括execve函数、clone函数以及fexecve函数中的任意一个或多个;
所述内存操作函数包括ptrace函数、process_vm_writev函数以及memfd_create函数中的任意一个或多个;
所述网络访问函数包括connect函数、accept函数、sendto函数以及recvfrom函数中的任意一个或多个;
所述系统相关函数包括mknodat函数、chroot函数以及init_module函数中的任意一个或多个。
优选地,所述确定所述敏感路径,包括:
确定如下路径为敏感路径:
通过syscall函数,以系统调用号直接调用所述敏感函数的路径;
通过dlopen函数、dlmopen函数、__libc_dlopen函数、__libc_dlsym函数、dlsym函数、dlvsym函数、dlsym_doit函数以及_dl_sym函数中的任意一个或几个函数直接调用所述敏感函数的路径;
通过先调用memfd_create函数在/proc/self/fd/目录下生成memfd:标志的文件描述符,进一步以fexecve函数执行memfd:标志的文件描述符的路径。
优选地,所述方法还包括:
在所述确定所述linux操作系统的程序中存在恶意代码的威胁之后,输出告警信息,所述告警信息用于提示用户在linux操作系统的程序中存在恶意代码的威胁。
一种恶意代码检测装置,包括:
获取单元,用于获取linux操作系统的程序被执行过程中对敏感函数的调用路径;
确定单元,用于当所述调用路径为敏感路径时,确定所述linux操作系统的程序中存在恶意代码的威胁;
其中,所述敏感函数为可以访问linux操作系统的资源的函数,和/或,可以改变linux操作系统的状态的函数;
所述敏感路径为除linux操作系统设置的对所述敏感函数的正常调用路径之外的调用路径。
一种存储介质,其上存储有程序,该程序被处理器执行时实现如上所述的恶意代码检测方法。
一种电子设备,所述电子设备包括存储器和处理器,所述存储器用于存储程序,所述处理器用于运行程序,其中,所述程序运行时执行如上所述的恶意代码检测方法。
借由上述技术方案,本申请公开了一种恶意代码检测方法及装置,通过获取linux操作系统的程序被执行过程中对敏感函数的调用路径,并确定调用路径是否为敏感路径,当确定调用路径为敏感路径时,即确定linux操作系统的程序中存在恶意代码的威胁。与现有技术的恶意代码的防护方法不同的是,本申请实施例提供的方案是基于操作系统的程序中包含的函数调用关系对恶意代码进行检测的,能够检测出未知恶意代码,以及,由已知恶意代码变形后生成的恶意代码,并且,与基于linux操作系统的程序对恶意代码进行防护相比,其防护粒度更细,这样即便恶意代码植入了白名单程序中也可进行有效检测。
上述说明仅是本申请技术方案的概述,为了能够更清楚了解本申请的技术手段,而可依照说明书的内容予以实施,并且为了让本申请的上述和其它目的、特征和优点能够更明显易懂,以下特举本申请的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本申请的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1为本申请实施例提供的一种恶意代码检测方法的流程示意图;
图2为本申请实施例提供的又一种恶意代码检测方法的流程示意图;
图3为本申请实施例提供的一种恶意代码检测装置的结构示意图;
图4为本申请实施例提供的又一种恶意代码检测装置的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
本申请发明人在实现本申请方案的过程中发现,通过将现有的两种恶意代码的防护方式结合使用,即,先基于恶意代码的特征码来检测植入linux操作系统的程序内的已知恶意代码,对于未知恶意代码,以及,由已知恶意代码变形生成的恶意代码,进一步通过程序的执行进行防护,也无法对白名单程序中植入的恶意代码进行防护,究其根源,是因为基于linux操作系统的程序对恶意代码进行防护,防护粒度过粗。
本申请实施例中就是针对上述情况,提供了相应的改进方案。该方案可以提供给linux操作系统主机的安全防护系统来使用,这种安全防护系统在运行过程中对恶意代码检测,与现有技术的恶意代码的防护方法不同的是,本申请实施例提供的方案是基于操作系统的程序中包含的函数调用关系对恶意代码进行检测的,与基于linux操作系统的程序对恶意代码进行防护相比,其防护粒度更细,这样即便恶意代码植入了白名单程序中也可进行有效检测。
下面对本申请实施例提供的具体实现方案进行详细介绍。
实施例一
该实施例一从linux操作系统主机的安全防护系统的角度,提供了一种恶意代码检测方法,具体的,参见图1,该方法具体可以包括:
s101:获取linux操作系统的程序被执行过程中对敏感函数的调用路径;
s102:当所述调用路径不为敏感路径时,确定所述linux操作系统的程序中存在恶意代码的威胁。
需要说明的是,所述敏感函数为可以访问linux操作系统的资源的函数,和/或,可以改变linux操作系统的状态的函数,所述敏感路径为除linux操作系统设置的对所述敏感函数的正常调用路径之外的调用路径。
本实施例提供的恶意代码检测方法,通过获取linux操作系统的程序被执行过程中对敏感函数的调用路径,并确定调用路径是否为敏感路径,当确定调用路径为敏感路径时,即确定linux操作系统的程序中存在恶意代码的威胁。与现有技术的恶意代码的防护方法不同的是,本申请实施例提供的方案是基于操作系统的程序中包含的函数调用关系对恶意代码进行检测的,与基于linux操作系统的程序对恶意代码进行防护相比,其防护粒度更细,这样即便恶意代码植入了白名单程序中也可进行有效检测。
实施例二
该实施例二以实施例一为基础,从linux操作系统主机的安全防护系统的角度,提供了另一种恶意代码检测方法,具体的,参见图2,该方法具体可以包括:
s201:确定所述敏感函数以及确定所述敏感路径;
作为一种可实施方式,本申请中确定linux操作系统的程序中的文件操作函数、创建进程函数、内存操作函数、网络访问函数以及系统相关函数为敏感函数:
其中,所述文件操作函数包括open函数、openat函数、openat64函数、read函数、pread函数、write函数以及writev函数中的任意一个或多个;
所述创建进程函数包括execve函数、clone函数以及fexecve函数中的任意一个或多个;
所述内存操作函数包括ptrace函数、process_vm_writev函数以及memfd_create函数中的任意一个或多个;
所述网络访问函数包括connect函数、accept函数、sendto函数以及recvfrom函数中的任意一个或多个;
所述系统相关函数包括mknodat函数、chroot函数以及init_module函数中的任意一个或多个。
作为一种可实施方式,本申请中,确定如下路径为敏感路径:
通过syscall函数,以系统调用号直接调用所述敏感函数的路径;
通过dlopen函数、dlmopen函数、__libc_dlopen函数、__libc_dlsym函数、dlsym函数、dlvsym函数、dlsym_doit函数以及_dl_sym函数中的任意一个或几个函数直接调用所述敏感函数的路径;
通过先调用memfd_create函数在/proc/self/fd/目录下生成memfd:标志的文件描述符,进一步以fexecve函数执行memfd:标志的文件描述符的路径。
进一步需要说明的是,linux操作系统的程序不同,确定的敏感函数也不相同,除上述实施方式中列举的情况之外,其他的敏感函数确定方式也在本申请实施例保护范围之内。linux操作系统的程序不同,确定的敏感路径也不相同,除上述实施方式中列举的情况之外,其他的敏感路径确定方式也在本申请实施例保护范围之内。
s202:对linux操作系统的程序中的所述敏感函数以及所述敏感路径中所用到的函数进行插桩,得到插桩后的linux操作系统的程序;
s203:在所述插桩后的linux操作系统的程序被执行过程中,对所述敏感函数以及所述敏感路径中所用到的函数的调用进行跟踪,获取敏感函数在linux操作系统的程序被执行过程中的调用路径;
基于上述实施方式,本申请实施例还给出了两种在所述插桩后的linux操作系统的程序被执行过程中,对所述敏感函数以及所述敏感路径中所用到的函数的调用进行跟踪,获取敏感函数在linux操作系统的程序被执行过程中的调用路径的示例,具体如下:
示例一:
首先通过插桩后的敏感路径中的dlsym函数会在第一时间被监控,发现其进一步调用syscall函数,而syscall函数同样被插桩,会继续监控,进一步发现通过syscall函数调用敏感函数中的openat64函数,通过以上跟踪,确定敏感函数中的openat64函数的调用路径为“通过syscall函数调用”。
示例二:
首先通过动态插桩后的敏感路径中的memfd_create函数会在第一时间被监控,发现其进一步调用fexecve函数,而fexecve函数身为敏感函数被同样插桩,会继续监控,最终发现其执行的是以memfd:为前缀的内存文件描述符,通过以上跟踪,确定敏感函数中的fexecve函数的调用路径为“通过先调用memfd_create函数在/proc/self/fd/目录下生成memfd:标志的文件描述符,进一步以fexecve函数执行memfd:标志的文件描述符的路径”。
s204:当所述调用路径为敏感路径时,确定所述linux操作系统的程序中存在恶意代码的威胁;
上述示例一中,通过将敏感函数中的openat64函数的调用路径与敏感路径对比,确定其调用路径为敏感路径“通过syscall函数,以系统调用号直接调用所述敏感函数的路径”,据此即可确定linux操作系统的程序中存在恶意代码的威胁。
上述示例二中,通过将敏感函数中的fexecve函数的调用路径与敏感路径对比,确定其调用路径为敏感路径“通过先调用memfd_create函数在/proc/self/fd/目录下生成memfd:标志的文件描述符,进一步以fexecve函数执行memfd:标志的文件描述符的路径”,据此即可确定linux操作系统的程序中存在恶意代码的威胁。
s205:输出告警信息,所述告警信息用于提示用户在linux操作系统的程序中存在恶意代码的威胁。
通过本实施例提供的恶意代码检测方法,可以看出敏感路径中的函数与敏感函数存在交集,其你中有我,我中有你,互为因果的关系形成了一种立体防护体系,通过不同的组合可以达到精准检测恶意代码的目的。
实施例三
该实施例三与实施例一相对应,从linux操作系统的安全防护系统的角度,提供了一种恶意代码检测装置,具体的,参见图3,该装置具体可以包括:
获取单元31,用于获取linux操作系统的程序被执行过程中对敏感函数的调用路径;
确定单元32,用于当所述调用路径为敏感路径时,确定所述linux操作系统的程序中存在恶意代码的威胁;
其中,所述敏感函数为可以访问linux操作系统的资源的函数,和/或,可以改变linux操作系统的状态的函数;
所述敏感路径为除linux操作系统设置的对所述敏感函数的正常调用路径之外的调用路径。
优选地,参见图4,所述装置还包括:
插桩单元41,用于在获取linux操作系统的程序被执行过程中对敏感函数的调用路径之前,对linux操作系统的程序中的所述敏感函数以及所述敏感路径中所用到的函数进行插桩,得到插桩后的linux操作系统的程序。
优选地,所述获取单元具体用于:
在所述插桩后的linux操作系统的程序被执行过程中,对所述敏感函数以及所述敏感路径中所用到的函数的调用进行跟踪,获取敏感函数在linux操作系统的程序被执行过程中的调用路径。
优选地,所述装置还包括:
敏感函数确定单元42,用于在所述对linux操作系统的程序中的所述敏感函数以及所述敏感路径中所用到的函数进行插桩之前,确定所述敏感函数;
敏感路径确定单元43,用于在所述对linux操作系统的程序中的所述敏感函数以及所述敏感路径中所用到的函数进行插桩之前,确定所述敏感路径。
优选地,所述敏感函数确定单元,具体用于:
确定linux操作系统的程序中的文件操作函数、创建进程函数、内存操作函数、网络访问函数以及系统相关函数为敏感函数;
所述文件操作函数包括open函数、openat函数、openat64函数、read函数、pread函数、write函数以及writev函数中的任意一个或多个;
所述创建进程函数包括execve函数、clone函数以及fexecve函数中的任意一个或多个;
所述内存操作函数包括ptrace函数、process_vm_writev函数以及memfd_create函数中的任意一个或多个;
所述网络访问函数包括connect函数、accept函数、sendto函数以及recvfrom函数中的任意一个或多个;
所述系统相关函数包括mknodat函数、chroot函数以及init_module函数中的任意一个或多个。
优选地,所述敏感路径确定单元,具体用于:
确定如下路径为敏感路径:
通过syscall函数,以系统调用号直接调用所述敏感函数的路径;
通过dlopen函数、dlmopen函数、__libc_dlopen函数、__libc_dlsym函数、dlsym函数、dlvsym函数、dlsym_doit函数以及_dl_sym函数中的任意一个或几个函数直接调用所述敏感函数的路径;
通过先调用memfd_create函数在/proc/self/fd/目录下生成memfd:标志的文件描述符,进一步以fexecve函数执行memfd:标志的文件描述符的路径。
优选地,所述装置还包括:
告警单元44,用于在所述确定所述linux操作系统的程序中存在恶意代码的威胁之后,输出告警信息,所述告警信息用于提示用户在linux操作系统的程序中存在恶意代码的威胁。
需要说明的是,上述各个单元的具体实现已在方法实施例中详细说明,具体请参见方法实施例中的相关内容,本实施例不再赘述。
所述恶意代码检测装置包括处理器和存储器,上述各个单元均作为程序单元存储在存储器中,由处理器执行存储在存储器中的上述程序单元来实现相应的功能。
处理器中包含内核,由内核去存储器中调取相应的程序单元。内核可以设置一个或以上,通过调整内核参数来实现对恶意代码的检测。
存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram),存储器包括至少一个存储芯片。
本申请实施例提供了一种存储介质,其上存储有程序,该程序被处理器执行时实现所述恶意代码检测方法。
本申请实施例提供了一种处理器,所述处理器用于运行程序,其中,所述程序运行时执行所述恶意代码检测方法。
本申请实施例提供了一种电子设备,电子设备包括处理器、存储器及存储在存储器上并可在处理器上运行的程序,处理器执行程序时实现以下步骤:
获取linux操作系统的程序被执行过程中对敏感函数的调用路径;
当所述调用路径为敏感路径时,确定所述linux操作系统的程序中存在恶意代码的威胁;
其中,所述敏感函数为可以访问linux操作系统的资源的函数,和/或,可以改变linux操作系统的状态的函数;
所述敏感路径为除linux操作系统设置的对所述敏感函数的正常调用路径之外的调用路径。
优选地,所述方法还包括:
在获取linux操作系统的程序被执行过程中对敏感函数的调用路径之前,对linux操作系统的程序中的所述敏感函数以及所述敏感路径中所用到的函数进行插桩,得到插桩后的linux操作系统的程序。
优选地,所述获取敏感函数在linux操作系统的程序被执行过程中的调用路径,包括:
在所述插桩后的linux操作系统的程序被执行过程中,对所述敏感函数以及所述敏感路径中所用到的函数的调用进行跟踪,获取敏感函数在linux操作系统的程序被执行过程中的调用路径。
优选地,所述方法还包括:
在所述对linux操作系统的程序中的所述敏感函数以及所述敏感路径中所用到的函数进行插桩之前,确定所述敏感函数以及确定所述敏感路径。
优选地,所述确定所述敏感函数,包括:
确定linux操作系统的程序中的文件操作函数、创建进程函数、内存操作函数、网络访问函数以及系统相关函数为敏感函数;
所述文件操作函数包括open函数、openat函数、openat64函数、read函数、pread函数、write函数以及writev函数中的任意一个或多个;
所述创建进程函数包括execve函数、clone函数以及fexecve函数中的任意一个或多个;
所述内存操作函数包括ptrace函数、process_vm_writev函数以及memfd_create函数中的任意一个或多个;
所述网络访问函数包括connect函数、accept函数、sendto函数以及recvfrom函数中的任意一个或多个;
所述系统相关函数包括mknodat函数、chroot函数以及init_module函数中的任意一个或多个。
优选地,所述确定所述敏感路径,包括:
确定如下路径为敏感路径:
通过syscall函数,以系统调用号直接调用所述敏感函数的路径;
通过dlopen函数、dlmopen函数、__libc_dlopen函数、__libc_dlsym函数、dlsym函数、dlvsym函数、dlsym_doit函数以及_dl_sym函数中的任意一个或几个函数直接调用所述敏感函数的路径;
通过先调用memfd_create函数在/proc/self/fd/目录下生成memfd:标志的文件描述符,进一步以fexecve函数执行memfd:标志的文件描述符的路径。
优选地,所述方法还包括:
在所述确定所述linux操作系统的程序中存在恶意代码的威胁之后,输出告警信息,所述告警信息用于提示用户在linux操作系统的程序中存在恶意代码的威胁。
本文中的电子设备可以是服务器、pc、pad、手机等。
本申请还提供了一种计算机程序产品,当在数据处理设备上执行时,适于执行初始化有如下方法步骤的程序:
获取linux操作系统的程序被执行过程中对敏感函数的调用路径;
当所述调用路径为敏感路径时,确定所述linux操作系统的程序中存在恶意代码的威胁;
其中,所述敏感函数为可以访问linux操作系统的资源的函数,和/或,可以改变linux操作系统的状态的函数;
所述敏感路径为除linux操作系统设置的对所述敏感函数的正常调用路径之外的调用路径。
优选地,所述方法还包括:
在获取linux操作系统的程序被执行过程中对敏感函数的调用路径之前,对linux操作系统的程序中的所述敏感函数以及所述敏感路径中所用到的函数进行插桩,得到插桩后的linux操作系统的程序。
优选地,所述获取敏感函数在linux操作系统的程序被执行过程中的调用路径,包括:
在所述插桩后的linux操作系统的程序被执行过程中,对所述敏感函数以及所述敏感路径中所用到的函数的调用进行跟踪,获取敏感函数在linux操作系统的程序被执行过程中的调用路径。
优选地,所述方法还包括:
在所述对linux操作系统的程序中的所述敏感函数以及所述敏感路径中所用到的函数进行插桩之前,确定所述敏感函数以及确定所述敏感路径。
优选地,所述确定所述敏感函数,包括:
确定linux操作系统的程序中的文件操作函数、创建进程函数、内存操作函数、网络访问函数以及系统相关函数为敏感函数;
所述文件操作函数包括open函数、openat函数、openat64函数、read函数、pread函数、write函数以及writev函数中的任意一个或多个;
所述创建进程函数包括execve函数、clone函数以及fexecve函数中的任意一个或多个;
所述内存操作函数包括ptrace函数、process_vm_writev函数以及memfd_create函数中的任意一个或多个;
所述网络访问函数包括connect函数、accept函数、sendto函数以及recvfrom函数中的任意一个或多个;
所述系统相关函数包括mknodat函数、chroot函数以及init_module函数中的任意一个或多个。
优选地,所述确定所述敏感路径,包括:
确定如下路径为敏感路径:
通过syscall函数,以系统调用号直接调用所述敏感函数的路径;
通过dlopen函数、dlmopen函数、__libc_dlopen函数、__libc_dlsym函数、dlsym函数、dlvsym函数、dlsym_doit函数以及_dl_sym函数中的任意一个或几个函数直接调用所述敏感函数的路径;
通过先调用memfd_create函数在/proc/self/fd/目录下生成memfd:标志的文件描述符,进一步以fexecve函数执行memfd:标志的文件描述符的路径。
优选地,所述方法还包括:
在所述确定所述linux操作系统的程序中存在恶意代码的威胁之后,输出告警信息,所述告警信息用于提示用户在linux操作系统的程序中存在恶意代码的威胁。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。
存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram)。存储器是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
以上仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。