系统操作执行方法及装置与流程

文档序号:12733136阅读:250来源:国知局
系统操作执行方法及装置与流程

本发明属于操作系统技术领域,特别是涉及一种系统操作执行方法及装置。



背景技术:

Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议,支持32位和64位硬件,其继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

Linux中的.so文件类似与微软公司在微软视窗(Windows)操作系统中的动态链接库(Dynamic Link Library/Dynamic-link Library,DLL),是微软公司在微软视窗(Windows)操作系统中,实现共享函数库概念的一种方式。

然而,采用动态链接库预加载方法在对系统原始操作函数进行调用时,存在着灵活性差的问题。



技术实现要素:

本发明实施例解决的问题是在对系统原始操作函数的执行行为进行扩展时,如何提高操作的灵活性。

为解决上述问题,本发明实施例提供了一种系统操作执行方法,包括:对系统调用共享库操作函数库进行挂钩,以阻止预配置的共享库中的挂钩函数对调用相应的原始函数;加载预配置的多个共享库;按照所述多个共享库的加载顺序执行相应共享库中的挂钩函数,并执行对应的原始函数,以对相应的原始函数的执行操作进行扩展。

可选地,所述加载预配置的多个共享库,包括:按照所获取的共享库配置文件中所述多个共享库地址的排列顺序,加载所述多个共享库。

可选地,所述按照所述多个共享库的加载顺序执行相应共享库中的挂钩函数,并执行对应的原始函数,以对相应的原始函数的执行操作进行扩展,包括:判断所述多个共享库中是否存在相应的协作开始挂钩函数;当确定所述多个共享库中存在相应的协作开始挂钩函数时,确定所述多个共享库处于协作模式;当确定所述多个共享库处于协作模式时,按照所述多个共享库的加载顺序分别执行相应位序的共享库的协作开始挂钩函数;将相应位序的共享库中的协作开始挂钩函数的执行结果和挂钩函数的参数传递至下一位序的共享库中的协作开始挂钩函数,并执行下一位序的共享库中的协作开始挂钩函数,直至所述多个共享库的协作开始挂钩函数执行完毕;当所述多个共享库的协作开始挂钩函数执行完毕时,执行所述原始函数。

可选地,当执行完毕所述原始函数之后,所述方法还包括:将所述共享库中排在预设位序的共享库的协作开始挂钩函数的执行结果和所述原始函数的执行结果传递至对应的协作终止函数,并执行所述协作终止函数,以对所述原始函数的运行结果进行处理。

可选地,所述按照所述多个共享库的加载顺序执行相应共享库中的挂钩函数,并执行对应的原始函数,以对相应的原始函数的执行操作进行扩展,还包括:当确定所述多个共享库中均不存在相应的协作开始挂钩函数时,确定所述多个共享库处于兼容模式;当处于兼容模式时,按照所述多个共享库的加载顺序分别执行相应位序的共享库的挂钩函数,直至所述多个共享库的挂钩函数执行完毕;当确定所述多个共享库的挂钩函数执行完毕时,执行所述原始函数。

本发明实施例还提供了一种系统操作执行装置,包括:挂钩单元,适于对系统调用共享库操作函数库进行挂钩,以阻止预配置的共享库中的挂钩函数对调用相应的原始函数;加载单元,适于加载预配置的多个共享库;执行单元,适于按照所述多个共享库的加载顺序执行相应共享库中的挂钩函数,并执行对应的原始函数,以对相应的原始函数的执行操作进行扩展。

可选地,所述加载单元,适于按照所获取的共享库配置文件中所述多个共享库地址的排列顺序,加载所述多个共享库。

可选地,所述执行单元,适于判断所述多个共享库中是否存在相应的协作开始挂钩函数;当确定所述多个共享库中存在相应的协作开始挂钩函数时,确定所述多个共享库处于协作模式;当确定所述多个共享库处于协作模式时,按照所述多个共享库的加载顺序分别执行相应位序的共享库的协作开始挂钩函数;将相应位序的共享库中的协作开始挂钩函数的执行结果和挂钩函数的参数传递至下一位序的共享库中的协作开始挂钩函数,并执行下一位序的共享库中的协作开始挂钩函数,直至所述多个共享库的协作开始挂钩函数执行完毕;当所述多个共享库的协作开始挂钩函数执行完毕时,执行所述原始函数。

可选地,所述执行单元,还适于当执行完毕所述原始函数之后,将所述共享库中排在预设位序的共享库的协作开始挂钩函数的执行结果和所述原始函数的执行结果传递至对应的协作终止函数,并执行所述协作终止函数,以对所述原始函数的运行结果进行处理。

可选地,所述执行单元,还适于当确定所述多个共享库中均不存在相应的协作开始挂钩函数时,确定所述多个共享库处于兼容模式;当处于兼容模式时,按照所述多个共享库的加载顺序分别执行相应位序的共享库的挂钩函数,直至所述多个共享库的挂钩函数执行完毕;当确定所述多个共享库的挂钩函数执行完毕时,执行所述原始函数。

与现有技术相比,本发明的技术方案具有以下的优点:

上述的方案,通过将多个共享库中的挂钩函数与系统的原始函数进行挂钩,通过多个共享库中的挂钩函数,可以对原始函数的操作进行任意地扩展,因而可以提高系统操作的灵活性。

进一步地,确定多个共享库处于协作模式时,按照所述多个共享库的加载顺序执行相应共享库中的挂钩函数和原始函数,可以通过预配置的多个共享库之间的协作实现对相应的原始函数的执行行为的扩展;当确定多个共享库可以分别对原始函数的执行行为进行扩展,因而可以进一步提高操作的灵活性。

附图说明

图1是本发明实施例中一种的系统操作执行方法的流程图;

图2是本发明实施例中另一种系统操作执行方法的流程图;

图3是本发明实施例中的一种系统操作执行装置的结构示意图。

具体实施方式

正如背景技术而言,在利用共享库预加载技术时,仅允许共享库与一个系统原始操作函数进行挂钩。当多个共享库同时对一个系统原始操作函数进行挂钩时,系统只会调用多个共享库中一个共享库中的挂钩函数。

因此,当需要对系统原始操作函数所实现的操作进行扩展,且扩展的操作较多时,需要将对应的多个扩展功能对应的挂钩函数写入一个共享库中,导致共享库中的挂钩函数的逻辑较为负载,从而导致操作较为复杂,也增加了出错率。

为解决上述问题,本发明实施例中的技术方案将多个共享库中的挂钩函数与系统的原始函数进行挂钩,通过多个共享库中的挂钩函数,可以对原始函数的操作进行任意地扩展,因而可以提高原始函数操作的灵活性。

为使本发明的上述目的、特征和优点能够更为明显易懂,下面结合附图对本发明的具体实施例做详细的说明。

图1是本发明实施例中的一种系统操作执行方法的流程图。如图1所示的系统操作执行方法,可以包括:

步骤S101:对系统调用共享库操作函数进行挂钩。

在本发明一实施例中,所采用的操作系统为Unix系统,所述系统调用共享库操作函数为dyslm函数。在具体实施中,可以采用相应操作系统中的系统调用共享库操作函数。

步骤S102:加载预配置的多个共享库。

在具体实施中,可以按照预配置的多个共享库的绝对地址清单加载预配置的多个共享库。

步骤S103:按照所述多个共享库的加载顺序执行相应共享库中的挂钩函数,并执行对应的原始函数,以对相应的原始函数的执行操作进行扩展。

在具体实施中,相应的原始函数为与预配置的多个共享库对应的一个系统操作函数。

上述的方案,将多个共享库中的挂钩函数与系统的原始函数进行挂钩,通过多个共享库中的挂钩函数,可以对原始函数的操作进行任意地扩展,因而可以提高原始函数操作的灵活性。

下面将对本发明实施例中的系统操作执行方法进行进一步详细的介绍。

参见图2,本发明实施例中的一种系统操作执行方法,适于对系统原始操作函数所执行的操作进行扩展,具体可以采用如下的步骤实现:

步骤S201:对系统调用共享库操作函数进行挂钩。

在本发明一实施例中,当操作系统为Unix系统时,可以通过将系统调用共享库操作函数dlsym与预配置的多个共享库进行挂钩,并返回空指针,以阻止所述预配置的多个共享库中的挂钩函数对被挂钩的原始函数的调用。

步骤S202:加载预配置的多个共享库。

在本发明一实施例中,预配置的多个共享库中的绝对地址存储在对应的共享库配置文件中,且预配置的多个共享库中的绝对地址按照顺序存储在所述共享库配置文件中。通过加载对应的共享库配置文件,按照顺序读取所述配置文件中对应的共享库的绝对地址,并从对应的绝对地址出获取对应的共享库,从而加载预配置的多个共享库。

步骤S203:判断所述多个共享库中是否存在对应的协作开始挂钩函数;当判断结果为是时,可以执行步骤S204;反之,则可以执行步骤S207。

在具体实施中,预配置的多个共享库可以处于协作模式和兼容模式。其中,所述协作模式,是指预配置的多个共享库中的挂钩函数对应的操作之间具有相应的逻辑关系。与协作模式相反,处于兼容模式的预配置的多个共享库对应的操作之间相互独立,不具有相应的逻辑关系。

在本发明一实施例中,当预配置的共享库之间处于协作模式时,各个共享库中存在对应的协作开始挂钩函数,因而可以通过预配置的多个共享库中是否均存在对应的协作开始挂钩函数,判断预配置的多个共享库之间是处于协作模式还是兼容模式。

步骤S204:按照所述多个共享库的加载顺序执行相应位序的共享库中的协作开始挂钩函数,并将相应位序的共享库的协作开始挂钩函数的执行结果和挂钩函数的参数传递至下一位序的共享库中的协作开始挂钩函数,直至多个共享库的协作开始挂钩函数执行完毕。

在具体实施中,处于协作模式的多个共享库对相应的原始函数进行挂钩时,需要挂钩函数和协作开始挂钩函数。其中,挂钩函数,用于重载被挂钩函数,且可以直接被共享库预加载调用。每个挂钩函数的运行逻辑包括:(1)调用协作开始挂钩函数;(2)调用原始函数,并返回其执行结果。

在具体实施中,处于协作模式的多个共享库的协作开始挂钩函数,用于对原始函数执行之前的逻辑操作。在本发明一实施例中,每个共享库中的协作开始挂钩函数以“被挂钩函数名+framework_begin”命名,其参数为(上个共享库的协作挂钩函数运行结果,返回给协作终止挂钩函数,挂钩函数的参数),其返回值为(传递给原函数的参数)。

在具体实施中,当确定预配置的多个共享库中均存在对应的协作开始挂钩函数时,便可以按照预配置的多个共享库的加载顺序,首先执行相应位序的共享库中的协作开始挂钩函数,并将相应位序的共享库的协作开始挂钩函数的执行结果和挂钩函数的参数,传递至下一位序的共享库中的协作开始挂钩函数,直至预配置的多个共享库中的协作开始挂钩函数全部执行完毕。

步骤S205:执行所述原始函数。

在具体实施中,当预配置的多个共享库中的协作开始挂钩函数全部执行完毕时,可以调用原始函数,返回原始函数的执行结果。

在本发明一实施例中,当需要对原始函数的执行结果进行进一步的处理时,本发明实施例中的系统操作执行方法可以包括:

步骤S206:将所述多个共享库中排在预设位序的共享库的协作开始挂钩函数的执行结果和所述原始函数的执行结果传递至对应的协作终止函数,并执行所述协作终止函数,以对所述原始函数的运行结果进行处理。

在本发明一实施例中,当需要对原始函数的执行结果进行进一步的处理时,挂钩函数的运行逻辑还包括:(3)调用协作终止挂钩函数,并返回其执行结果。

其中,共享库中的协作终止挂钩函数,用于执行原始函数之后的程序逻辑,也即对原始函数的执行结果进行进一步的处理。在本发明一实施例中,每个共享库的协作终止挂钩函数以“被挂钩函数名+framework_end”命名,其参数为(处于协作模式的多个共享库中排在第一位序的共享库协作开始挂钩函数的返回的值,返回给下一位序的共享库的协作开始挂钩函数的值,原始函数的返回值),其返回值为返回给挂钩函数的值。

当预配置的多个共享库的协作终止挂钩函数,可以接收所述多个共享库中排在预设位序的共享库的协作开始挂钩函数的执行结果和所述原始函数的执行结果,并执行对应的逻辑操作,以对所述原始函数的运行结果进行处理。其中,协作终止函数的数量可以根据实际的需要进行设置,在此不做限制。

在具体实施中,所述预设位序可以根据实际的需要进行设置,如设置为第一位序,在此不做限制。

步骤S207:按照所述多个共享库的加载顺序依次执行相应位序的共享库中的挂钩函数。

在具体实施中,当确定预配置的多个共享库中均不存在对应的协作开始挂钩函数时,可以确定预配置的多个共享库处于兼容模式。当调用相应位序的共享库中的挂钩函数时,由于之前采用系统调用共享库操作函数dlsym与预配置的多个共享库进行挂钩,使得共享库无法利用系统调用共享库操作函数dlsym对原始函数进行调用。同时,属于兼容模式时,共享库中的挂钩函数的执行过程不可中断,因而无法对原始函数的执行结果进行进一步处理。

步骤S208:调用原始函数,并返回所述原始函数的执行结果。

在具体实施中,当预配置的多个共享库按照顺序执行完毕之后,由于之前采用系统调用共享库操作函数dlsym与预配置的多个共享库进行挂钩并返回空指针,使得共享库无法重复调用原始函数。在执行完毕所述多个共享库之后,再调用原始函数,以确保原始函数只可被调用一次。

上述对本发明实施例中的方法进行了详细的描述,下面将对上述的方法对应的装置进行介绍。

图3示出了本发明实施例中的一种系统操作执行装置的结构。参见图3,一种系统操作执行装置300可以包括挂钩单元301、加载单元302和执行单元303,其中:

所述挂钩单元301,适于对系统调用共享库操作函数库进行挂钩,以阻止预配置的共享库中的挂钩函数调用相应的原始函数;

所述加载单元302,适于加载预配置的多个共享库;在本发明一实施例中,所述加载单元302,适于按照所获取的共享库配置文件中所述多个共享库地址的排列顺序,加载所述多个共享库。

所述执行单元303,适于按照所述多个共享库的加载顺序执行相应共享库中的挂钩函数,并执行对应的原始函数,以对相应的原始函数的执行操作进行扩展。

在本发明一实施例中,所述执行单元303,适于判断所述多个共享库中是否存在相应的协作开始挂钩函数;当确定所述多个共享库中存在相应的协作开始挂钩函数时,确定所述多个共享库处于协作模式;当确定所述多个共享库处于协作模式时,按照所述多个共享库的加载顺序分别执行相应位序的共享库的协作开始挂钩函数;将相应位序的共享库中的协作开始挂钩函数的执行结果和挂钩函数的参数传递至下一位序的共享库中的协作开始挂钩函数,并执行下一位序的共享库中的协作开始挂钩函数,直至所述多个共享库的协作开始挂钩函数执行完毕;当所述多个共享库的协作开始挂钩函数执行完毕时,执行所述原始函数。

在本发明一实施例中,所述执行单元303,还适于当执行完毕所述原始函数之后,将所述共享库中排在预设位序的共享库的协作开始挂钩函数的执行结果和所述原始函数的执行结果传递至对应的协作终止函数,并执行所述协作终止函数,以对所述原始函数的运行结果进行处理。

本发明一实施例中,所述执行单元303,还适于当确定所述多个共享库中均不存在相应的协作开始挂钩函数时,确定所述多个共享库处于兼容模式;当处于兼容模式时,按照所述多个共享库的加载顺序分别执行相应位序的共享库的挂钩函数,直至所述多个共享库的挂钩函数执行完毕;当确定所述多个共享库的挂钩函数执行完毕时,执行所述原始函数。

采用本发明实施例中的上述方案,将多个共享库中的挂钩函数与系统的原始函数进行挂钩,通过多个共享库中的挂钩函数,可以对原始函数的操作进行任意地扩展,因而可以提高系统操作的灵活性。

进一步地,确定多个共享库处于协作模式时,按照所述多个共享库的加载顺序执行相应共享库中的挂钩函数和原始函数,可以通过预配置的多个共享库之间的协作实现对相应的原始函数的执行行为的扩展;当确定多个共享库可以分别对原始函数的执行行为进行扩展,因而可以进一步提高操作的灵活性。

本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于计算机可读存储介质中,存储介质可以包括:ROM、RAM、磁盘或光盘等。

以上对本发明实施例的方法及系统做了详细的介绍,本发明并不限于此。任何本领域技术人员,在不脱离本发明的精神和范围内,均可作各种更动与修改,因此本发明的保护范围应当以权利要求所限定的范围为准。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1