本发明专利技术适用于计算机技术领域,提供了程序的功能变更方法及装置,包括:接收函数替换请求和替换函数,所述函数替换请求用于将程序的源代码中的目标函数变更为所述替换函数;将所述替换函数编译为临时动态库后获取所述替换函数对应的函数地址,将所述替换函数对应的函数地址与所述目标函数关联后写入预设的全局符号表;在所述程序的运行过程中,执行所述目标函数之前,通过所述预设的全局符号表获取所述替换函数对应的函数地址;将所述目标函数的入口变更为所述替换函数对应的函数地址,执行所述替换函数,返回函数值。本发明专利技术使得对程序的功能变更无需再经历复杂的程序编译过程,变更过程具备实时性和动态性。
【技术实现步骤摘要】
本专利技术属于计算机
,尤其涉及程序的功能变更方法及装置。
技术介绍
通过C/C++等编程语言编写的程序,在经过预处理、编译、汇编、链接等编译过程之后生成可执行文件,而程序的运行即是对可执行文件的运行。然而在现阶段,一旦程序编译完成,其程序功能是不能发生改变的,若要变更程序功能,只能对程序的源代码进行修改,并重复上述预处理、编译、汇编、链接的编译过程,生成新的可执行文件以重新运行,实现过程复杂。
技术实现思路
有鉴于此,本专利技术实施例提供了程序的功能变更方法及装置,旨在解决现有技术在程序编译完成之后无法改变其程序功能的问题。第一方面,提供了一种程序的功能变更方法,包括:接收函数替换请求和替换函数,所述函数替换请求用于将程序的源代码中的目标函数变更为所述替换函数;将所述替换函数编译为临时动态库后获取所述替换函数对应的函数地址,将所述替换函数对应的函数地址与所述目标函数关联后写入预设的全局符号表;在所述程序的运行过程中,执行所述目标函数之前,通过所述预设的全局符号表获取所述替换函数对应的函数地址;将所述目标函数的入口变更为所述替换函数对应的函数地址,执行所述替换函数,返回函数值。第二方面,提供了一种程序的功能变更装置,包括:接收单元,用于接收函数替换请求和替换函数,所述函数替换请求用于将程序的源代码中的目标函数变更为所述替换函数;写入单元,用于将所述替换函数编译为临时动态库后获取所述替换函数对应的函数地址,将所述替换函数对应的函数地址与所述目标函数关联后写入预设的全局符号表;获取单元,用于在所述程序的运行过程中,执行所述目标函数之前,通过所述预设的全局符号表获取所述替换函数对应的函数地址;变更单元,用于将所述目标函数的入口变更为所述替换函数对应的函数地址,执行所述替换函数,返回函数值。本专利技术实施例可以实现在程序编译完成之后,尤其是在程序的运行过程之中,对程序功能的变更,使得对程序的功能变更无需再经历复杂的程序编译过程,变更过程具备实时性和动态性。附图说明为了更清楚地说明本专利技术实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图1是本专利技术实施例提供的程序的功能变更方法的实现流程图;图2是本专利技术实施例提供的程序的功能变更方法S101的具体实现流程图;图3是本专利技术另一实施例提供的程序的功能变更方法的实现流程图;图4是本专利技术实施例提供的功能变更装置的结构框图。具体实施方式以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透切理解本专利技术实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本专利技术。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本专利技术的描述。图1示出了本专利技术实施例提供的程序的功能变更方法的实现流程,详述如下:在S101中,接收函数替换请求和替换函数,所述函数替换请求用于将程序的源代码中的目标函数变更为所述替换函数。在本专利技术实施例中,函数替换请求和替换函数一起发送,函数替换请求指向了程序的源代码中的某一目标函数,用于指示在该程序的运行过程中,需要执行该目标函数时,将对目标函数的执行变更为对替换函数的执行,从而达到对程序进行功能变更的目的。其中,发送函数替换请求和替换函数的一方可以为运行该程序的终端的本机进程,也可以为相对于运行该程序的终端来说的远程进程。作为本专利技术的一个实施例,接收函数替换请求和替换函数的动作可以发生在程序的运行过程中,如图2所示,S101具体通过以下方式实现:在S201中,在所述程序启动运行之后,创建用于接收函数替换请求和替换函数的线程。在S202中,通过所述线程,在所述程序的运行过程中接收函数替换请求和替换函数。在该程序启动运行之后,程序首先自动地创建一个线程,该线程专门用于在程序的运行过程中接收来自控制一方(即上述本机进程或者远程进程)的函数替换请求和替换函数,这样一来,用户若想使程序实现某个功能的变更,可以在程序的运行过程中实时地发起函数替换请求,更好地实现了程序运行过程中对功能的动态变更。在S102中,将所述替换函数编译为临时动态库后获取所述替换函数对应的函数地址,将所述替换函数对应的函数地址与所述目标函数关联后写入预设的全局符号表。在接收到函数替换请求之后,首先保存与该函数替换请求对应的替换函数,并对该替换函数执行编译过程,调用编译器,将该替换函数编译为一个临时动态库,之后,通过系统调用,打开该临时动态库,通过该临时动态库获取到该替换函数对应的函数地址,并对预设的全局符号表进行刷新,刷新过程会将函数替换请求中指示的目标函数与获取到的函数地址相关联,写入预设的全局符号表。在S103中,在所述程序的运行过程中,执行所述目标函数之前,通过所述预设的全局符号表获取所述替换函数对应的函数地址。程序的运行过程,即是执行程序的源代码,并在执行过程中一一调用并执行源代码中的每个函数的过程。而在本专利技术实施例中,为了实现将目标函数变更为替换函数执行,从而实现程序功能变更的目的,可以在程序编译前的预处理过程中,就在该程序源代码内的每个函数入口均分别插入一个预处理宏,这样一来,在执行每个函数之前,均会先执行该预处理宏,该预处理宏是用于在执行函数前对预设的全局符号表进行查找,根据查找结果,若当前函数在预设的全局符号表中关联了函数地址,则表明要将当前函数变更为替换函数以执行;若当前函数在预设的全局符号表中未关联函数地址,则仍旧执行当前函数。因此,在该程序的运行过程中,执行函数替换请求所指示的目标函数之前,先会执行上述预处理宏,随着该预处理宏的执行,会在预设的全局符号表中查找出该目标函数关联了函数地址,该函数地址即为该目标函数对应的替换函数的函数地址,从而获取到该目标函数对应的替换函数的函数地址。在S104中,将所述目标函数的入口变更为所述替换函数对应的函数地址,执行所述替换函数,返回函数值。在获取到目标函数对应的替换函数的函数地址之后,会将该目标函数的入口变更为其对应的替换函数的函数地址,由此,在执行到目标函数时,并不会执行该目标函数的代码,而是转本文档来自技高网...
【技术保护点】
一种程序的功能变更方法,其特征在于,包括:接收函数替换请求和替换函数,所述函数替换请求用于将程序的源代码中的目标函数变更为所述替换函数;将所述替换函数编译为临时动态库后获取所述替换函数对应的函数地址,将所述替换函数对应的函数地址与所述目标函数关联后写入预设的全局符号表;在所述程序的运行过程中,执行所述目标函数之前,通过所述预设的全局符号表获取所述替换函数对应的函数地址;将所述目标函数的入口变更为所述替换函数对应的函数地址,执行所述替换函数,返回函数值。
【技术特征摘要】
1.一种程序的功能变更方法,其特征在于,包括:
接收函数替换请求和替换函数,所述函数替换请求用于将程序的源代码中
的目标函数变更为所述替换函数;
将所述替换函数编译为临时动态库后获取所述替换函数对应的函数地址,
将所述替换函数对应的函数地址与所述目标函数关联后写入预设的全局符号表;
在所述程序的运行过程中,执行所述目标函数之前,通过所述预设的全局
符号表获取所述替换函数对应的函数地址;
将所述目标函数的入口变更为所述替换函数对应的函数地址,执行所述替
换函数,返回函数值。
2.如权利要求1所述的方法,其特征在于,所述接收函数替换请求和替换
函数包括:
接收来自运行所述程序的终端的本机进程或者远程进程的函数替换请求和
替换函数。
3.如权利要求1所述的方法,其特征在于,所述方法还包括:
在所述程序编译前,在所述程序的源代码中每个函数的入口分别插入预处
理宏;
所述在所述程序的运行过程中,执行所述目标函数之前,通过所述预设的
全局符号表获取所述替换函数对应的函数地址包括:
在所述程序的运行过程中,执行所述目标函数之前,执行所述预处理宏,
以在所述预设的全局符号表中查找出所述目标函数存在所述替换函数;
在所述预设的全局符号表中获取所述替换函数对应的函数地址。
4.如权利要求1所述的方法,其特征在于,所述接收函数替换请求和替换
函数包括:
在所述程序启动运行之后,创建用于接收函数替换请求和替换函数的线程;
通过所述线程,在所述程序的运行过程中接收函数替换请求和替换函数。
5.如权利要求1所述的方法,其特征在于,在所述接收函数替换请求和替
换函数之前,所述方法还包括:
创建用于接收函数替换请求和替换函数,以及用于保存所述预设的全局符
号表的核心库;
在所述程序的编译过程中,链接所述核心库。
6.一种程...
【专利技术属性】
技术研发人员:丁鹏,韩鹏,
申请(专利权)人:TCL集团股份有限公司,
类型:发明
国别省市:广东;44
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。