一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种补丁实现方法、装置、嵌入式系统及存储介质与流程

2022-08-27 23:48:50 来源:中国专利 TAG:


1.本技术涉及数据处理技术领域,具体而言,涉及一种补丁实现方法、装置、嵌入式系统及存储介质。


背景技术:

2.随着互联网技术的迅速发展,各种软件层出不穷,当软件出现bug,或者需要升级增加新功能时,可以对软件对应的代码打补丁。现有的方案中需要软件开发人员手动对代码进行修改,并且需要改变函数调用语义。如果需要打补丁的点较多,软件开发人员的工作量大,而且容易引入新的bug。


技术实现要素:

3.本技术实施例的目的在于提供一种补丁实现方法、装置、嵌入式系统及存储介质,用以解决现有技术中,对软件打补丁时,需要人工改变函数调用语义,工作量大且容易引入新bug的问题。
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.图1为本技术实施例一提供的补丁实现方法的流程示意图;
43.图2为本技术实施例一提供的生成目标函数的流程示意图;
44.图3为本技术实施例一提供的第一函数布局图;
45.图4为本技术实施例一提供的第二函数布局图;
46.图5为本技术实施例一提供的扩展操作指令的指令结构示意图;
47.图6为本技术实施例一提供的第三函数布局图;
48.图7为本技术实施例二提供的补丁实现装置的结构示意图;
49.图8为本技术实施例三提供的嵌入式系统的结构示意图。
具体实施方式
50.为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
51.需要说明的是,在本发明实施例中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限
定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。
52.在本发明的描述中,需要理解的是,步骤前的数字标号并不表示执行步骤的前后顺序,仅用于方便描述本发明及区别每一步骤,因此不能理解为对本发明的限制。
53.下面将提供多个实施例,来具体介绍补丁实现方法、装置、嵌入式系统及存储介质。
54.实施例一:
55.为解决现有技术中,对软件打补丁时,需要人工改变函数调用语义,工作量大且容易引入新bug的问题,本技术实施例提供一种补丁实现方法,请参见图1所示。所述方法可以由嵌入式系统执行,该嵌入式系统上存储有目标函数,目标函数的函数入口处设置有跳转操作指令;跳转操作指令用于在接收到针对目标函数的执行指令时,跳转到与目标函数对应的内存变量中的地址,以执行与该地址对应的函数。
56.下面对补丁实现方法的具体流程进行详细阐述。应当说明的是,本发明提供的方法不以图1及以下所述的具体顺序为限制。
57.步骤s11:获取并存储与目标函数对应的补丁函数,目标函数的函数入口处设置有跳转操作指令。
58.步骤s12:将内存变量中的地址修改为指向补丁函数的地址。
59.应当说明的是,嵌入式系统一般具有cpu(中央处理器)、ram(随机存取存储器)、rom(只读存储器)、flash(闪存)等。可以将程序代码放在rom内,数据放在片内ram里。将程序代码放在rom里面的特点是成本低,跟着集成电路光罩一起生产,当集成电路制作完成后,程序代码就不可修改了,若有制作上的错误或是程序代码逻辑上的错误,可以通过打补丁的方式进行修补。
60.本技术实施例中,为了降低成本、节省功耗,在制作集成电路时,可以将目标函数设置在只读存储器中。而补丁函数通常是集成电路制作完成后生成的,且补丁函数后续有可能被再次修改,所以可以在步骤s11中,将获取到的补丁函数存入数据可修改的存储器中,比如,存入ram或者flash中。
61.为便于理解,首先对生成目标函数的过程进行说明。
62.请参见图2所示,本技术实施例中的目标函数可以在步骤s11之前,通过以下步骤生成:
63.步骤s111:获取源程序。
64.本技术实施例中,可以针对应用程序获取对应的源程序,这里的源程序是指该应用程序的源代码。
65.步骤s112:从源程序中确定待打补丁的函数。
66.在步骤s112中,可以根据实际应用场景确定待打补丁的函数,比如一个源程序中可能有100、200个待打补丁的函数。
67.步骤s113:在待打补丁的函数的函数入口处生成空操作指令。
68.在步骤s113中,可以在对源程序进行编译时,通过编译工具在待打补丁的函数的
函数入口处生成空操作指令。比如,可以通过开源编译器gnu gcc中的编译选项patchable-function-entry,在待打补丁的函数的函数入口处生成nop指令,这里的nop指令也即是空操作指令,比如,令fpatchable-function-entry=3,则编译器会在函数的入口点处生成额外、连续的3条nop指令系列。
69.步骤s114:针对待打补丁的函数生成对应的跳转操作指令。
70.步骤s115:将空操作指令替换为对应的跳转操作指令得到目标函数。
71.当链接器完成源程序链接后,可以将空操作指令替换成对应的跳转操作指令得到目标函数,然后将目标函数存入只读存储器,当然,源程序中不需要打补丁的函数也可以存入只读存储器。
72.可以理解的是,本技术实施例中的跳转操作指令本质上是函数,可以由嵌入式系统中的处理器运行该函数,从而实现对应的功能。本技术实施例中的跳转操作指令可以采用现有的指令集中的指令,比如可以直接采用arm指令集、riscv指令集、mips指令集或者x86指令集中的标准指令实现跳转功能。
73.可以理解的是,在实际应用中,可以根据需要使用的指令的特点在待打补丁的函数的函数入口处预留适当数量的nop指令,这里适当数量的nop指令起到的作用是占位符的作用,它们占用的空间大小需要容纳步骤s114中跳转操作指令的大小。
74.本技术实施例中的跳转操作指令可以基于寄存器实现跳转功能,也即,跳转操作指令用于在接收到针对目标函数的执行指令时,将与目标函数对应的内存变量中的地址加载到临时寄存器中,并跳转到临时寄存器所指向的地址。当然,在其他的实施例中,也可以基于长跳转或者短跳转实现跳转功能。
75.当跳转操作指令基于寄存器实现跳转功能时,若采用现有的riscv指令集中的指令,则需要在待打补丁的函数的函数的函数入口处生成3条nop指令。具体的可以参见图3所示,图3为链接完成,但指令替换还未开始前的函数布局图,图3中存在func1、func2以及func3这3个待打补丁的函数,可以根据需要对这3个函数中的任意函数打补丁。需要说明的是,本技术实施例不以3个待打补丁的函数为限制。
76.图3中的entry1、entry2和entry3分别表示目标函数func1对应的内存变量、目标函数func2对应的内存变量、目标函数func3对应的内存变量,图3中的entry1、entry2和entry3分别存放func1、func2、和func3函数体的起始地址,而不是函数func1、func2、和func3的起始地址。这里各函数体的起始地址等于各个函数的起始地址减去某个固定偏移,这个固定偏移也就是连续nop指令占用的长度,假设固定偏移为n个字节,则func(x)函数体的起始地址=func(x)函数的起始地址-n。
77.在将空操作指令替换为对应的跳转操作指令得到目标函数之后,函数布局图可以参见图4所示,此时,跳转操作指令已经替换了nop指令序列。应当说明的是,本技术实施例中需要针对每一待打补丁的函数预设对应的内存变量,并将该内存变量存入数据可修改的存储器中,内存变量的大小可以根据系统的内存资源灵活选择,这样,每一目标函数均存在对应的内存变量。
78.可以理解的是,可以在数据可修改的存储器中开辟一个连续的地址空间存储各待打补丁的函数分别对应的内存变量,各内存变量在该地址空间中连续存储,也即可以按照图3或图4所示的方式存储各内存变量。
79.加载内存变量所用的临时寄存器,也即图3和图4中的register,可以选择指令集规范中的临时寄存器。
80.需要说明的是,本技术实施例中的跳转操作指令的功能可以由一条扩展操作指令实现。请参见图5所示,该扩展操作指令包括内存变量标识信息、寄存器标识信息以及操作码信息。本技术实施例中可以为内存变量标识信息分配10个bit位,本技术实施例中的扩展操作指令用于:从与内存变量地址对应的内存变量中,加载地址到寄存器标识信息对应的临时寄存器,并跳转到该临时寄存器所指向的地址;内存变量地址为根据对应的偏移地址以及基地址寄存器中的预设地址计算得到的地址,偏移地址为根据内存变量标识信息计算得到的地址,具体的,可以根据内存变量标识信息以及内存变量占有的内存大小和内存变量中存储的地址占有的内存大小计算偏移地址。
81.如果采用32位的riscv指令集架构中的标准指令实现“加载对应的内存变量中的地址到临时寄存器,并跳转到所述临时寄存器所指向的地址”,由于内存变量本身就占有4字节,而“加载”这一操作也需要占据一定的字节空间,而riscv指令集架构中的每一条指令最多对应4字节的存储空间,所以如果通过riscv指令集架构中的标准指令来实现跳转操作指令的功能的话,则需要3条riscv指令,其中两条4字节的指令实现“加载内存变量中地址到临时寄存器”,一条2字节的指令实现“跳转到所述临时寄存器所指向的地址”,所以如果采用现有的指令集架构中的标准指令来实现本技术实施例中跳转操作指令的功能的话,该指令共需占用10个字节的存储空间。
82.本技术实施例中,提供了一种通过扩展操作指令实现跳转操作指令的功能的方式,通过本技术实施例提供的扩展操作指令实现“加载对应的内存变量中的地址到临时寄存器,并跳转到所述临时寄存器所指向的地址”时,由于可以由处理器通过内存变量标识信息和基地址寄存器中的预设地址计算出内存变量地址,无需在扩展指令中携带内存变量地址,因此通过一条4字节的指令便可实现“加载对应的内存变量中的地址到临时寄存器,并跳转到所述临时寄存器所指向的地址”。通过这个扩展指令一方面节省了存储空间,另一方面又实现了整个地址空间的跳转。
83.可以理解的是,本技术实施例中扩展指令的语义为:加载l p的值到对应的register中,并跳转到register所指示的地址,l表示基地址寄存器jbregister中的预设地址,p表示补丁函数的地址相对于预设地址的偏移。p可以根据扩展操作指令中的内存变量标识信息、内存变量占用的地址空间大小以及内存变量中存储的地址所占用的地址空间大小计算得到。通常来说,内存变量占用的地址空间大小与内存变量中存储的地址所占用的地址空间大小是相等的,因此,可以通过公式p=entry id*m-m计算偏移地址,entry id为内存变量标识,表示第1个、第2个

第n个内存变量,m表示一个内存变量占用的地址空间大小,内存变量中的一个地址所占用的地址空间大小也可以为m。对于32位的处理器,m可以取4字节,对于64位的处理器,m可以取8字节,m的具体取值可以根据实际应用场景灵活设置。本技术实施例以m等于4字节为例进行示例性说明。此时,扩展指令的语义为:加载l entry id*4-4的值到对应的register中,并跳转到register所指示的地址。
84.本技术实施例中的jbregister是一个程序可写的寄存器,可以根据嵌入式系统中flash或者ram的规划,指向第一个内存变量的地址,也即指向entry 1的地址。当然了,在其他的实施例中,jbregister也可以指向其他内存变量的地址,比如指向entry 2、entry 3
等。本技术实施例中配置jbregister是为了与扩展指令配合使用,实现“加载对应的内存变量中的地址到临时寄存器,并跳转到所述临时寄存器所指向的地址”这一功能。
85.可以理解的是,为了提高读取内存变量的速度,本技术实施例中的内存变量可以存储在ram里面。
86.在按照上述方式生成目标函数,并完成对各目标函数对应的内存变量的配置之后,可以通过上述步骤s11和步骤s12对目标函数打补丁。
87.请参见图6所示,假设某一应用程序具有图6所示的3个目标函数,这3个目标函数存储在rom中,这里以对目标函数func2打补丁为例进行说明。
88.首先,可以获取并存储新的func2,这里新的func2也即是目标函数func2的补丁函数,且新的func2是经过编译链接处理的函数。本技术实施例中可以将获取得到的新的func2存入flash中。应当说明的是,这里新的func2可以是正常的函数,也即是函数入口处不带nop指令的函数。
89.然后,将与目标函数func2对应的内存变量entry2中存放的地址改为新的func2函数的起始地址。这样的作用是,当调用rom中原始的func2时,也即调用目标函数func2时,程序控制流会经由register的指向,转移到新的func2执行。也就是,此时旧的func2的函数体不会再被执行,达到了用新func2替换旧func2的目的。
90.在实际应用中,当需要对某一应用程序打补丁时,可以获取该应用程序的多个目标函数分别对应的补丁函数,然后将各补丁函数存入数据可修改的存储器中,并将各目标函数各自对应的内存变量中的地址修改为指向各自对应的补丁函数的地址,应当说明的是,这里的各补丁函数是经过编译链接的函数。可以理解的是,在按照上述方式对目标函数打补丁之后,还可以对该目标函数打新的补丁。
91.在一种实施方式中,当需要对该应用程序的某一目标函数打新补丁时,可以先清除该数据可修改的存储器中该应用程序对应的所有补丁函数,然后对该数据可修改的存储器中该应用程序所对应的所有补丁函数进行重写。也即,此时需要获取该目标函数对应的新补丁函数,也需要获取其他目标函数对应的原始的补丁函数,然后将所述新补丁函数和所述原始的补丁函数重新写入数据可修改的存储器中,这里的其他目标函数是指本次不需要打补丁,而之前打过补丁的目标函数。可以理解的是,这里的新补丁函数和原始的补丁函数是经过编译链接的函数。在本实施方式中,对目标应用程序对应的所有补丁函数打包进行整体重写,可以节省存储空间,提升补丁可靠性。
92.在另外一种实施方式中,当需要对某一目标函数打新补丁时,无需清除该数据可修改的存储器中该应用程序对应的补丁函数,可以只向该数据可修改的存储器中重新写入该目标函数对应的新补丁函数,将其他目标函数对应的原始的补丁函数保留在该数据可修改的存储器中,也即,本实施方式中无需向该数据可修改的存储器重新写入其他目标函数对应的原始的补丁函数。可以减少函数重写量,提升重写效率。
93.具体的,本技术实施例中,在对目标函数打完补丁之后,对补丁函数打新的补丁,也即在步骤s12之后,还可以包括以下步骤:
94.获取与目标函数对应的新补丁函数;
95.将新补丁函数存入数据可修改的存储器中;
96.当新补丁函数在数据可修改的存储器中的起始地址与原始的补丁函数在数据可
修改的存储器中的起始地址不同时,将与该目标函数对应的内存变量中的地址修改为指向新补丁函数的地址。
97.在确定新补丁函数所需占用的内存空间大小小于等于原始的补丁函数占用的内存空间大小时,从数据可修改的存储器中删除原始的补丁函数,并将新补丁函数存入原始的补丁函数的位置上;新补丁函数在数据可修改的存储器中的起始地址与原始的补丁函数在数据可修改的存储器中的起始地址相同;
98.在确定新补丁函数所需占用的内存空间大小大于原始的补丁函数占用的内存空间大小时,将新补丁函数存入可容纳新补丁函数的空闲空间,该空闲空间为数据可修改的存储器中的空闲存储空间。
99.在上述实现过程中,一方面,当确定新补丁函数所需占用的内存空间大小小于等于原始的补丁函数占用的内存空间大小时,可以将新补丁函数覆盖在原始的补丁函数上,可以节省程序占用的内存资源,且由于新补丁函数在数据可修改的存储器中的起始地址与原始的补丁函数在数据可修改的存储器中的起始地址相同,所以此时无需对对应内存变量中的地址进行修改,所以可以提升处理效率;另一方面,当确定新补丁函数所需占用的内存空间大小大于原始的补丁函数占用的内存空间大小时,可以将新补丁函数存储在另外可容纳该函数的空闲空间上,然后将内存变量中的地址修改为指向新补丁函数的地址。
100.通过本技术实施例提供的补丁实现方法,当需要打补丁时,获取并存储与函数入口处设置有跳转操作指令的目标函数对应的补丁函数,然后将与目标函数对应的内存变量中的地址修改为指向补丁函数的地址,整个过程自动化进行,无需人工参与,另外,通过改变内存变量中的地址,便可跳转到补丁函数,无需改变函数调用语义,更便于代码优化和静态分析。
101.实施例二:
102.本技术实施例提供一种补丁实现装置,请参见图7所示,包括:
103.获取存储模块701,用于获取并存储与目标函数对应的补丁函数;目标函数为函数入口处设置有跳转操作指令的待打补的函数;跳转操作指令用于在目标函数接收到执行指令时,控制跳转到与目标函数对应的内存变量中的地址,以执行与地址对应的函数;
104.修改模块702,用于将内存变量中的地址修改为指向补丁函数的地址。
105.在示例性的实施例中,该装置还包括目标函数生成模块,用于获取源程序;从所述源程序中确定待打补丁的函数;在所述待打补丁的函数的函数入口处生成空操作指令;针对所述待打补丁的函数生成对应的跳转操作指令;将所述空操作指令替换为对应的所述跳转操作指令得到所述目标函数。
106.在示例性的实施例中,目标函数生成模块用于在对所述源程序进行编译的过程中,通过编译工具在所述待打补丁的函数的函数入口处生成空操作指令。
107.在示例性的实施例中,所述跳转操作指令用于在接收到针对所述目标函数的执行指令时,将与所述目标函数对应的内存变量中的地址加载到临时寄存器中,并跳转到所述临时寄存器所指向的地址。
108.在示例性的实施例中,所述跳转操作指令的功能由一条扩展操作指令实现;所述扩展操作指令包括内存变量标识信息、寄存器标识信息以及操作码信息,所述扩展操作指令用于:从与内存变量地址对应的内存变量中,加载地址到所述寄存器标识信息对应的临
时寄存器,并跳转到该临时寄存器所指向的地址;所述内存变量地址为根据对应的偏移地址以及基地址寄存器中的预设地址计算得到的地址,所述偏移地址为根据所述内存变量标识信息计算得到的地址。
109.在示例性的实施例中,所述目标函数为预先设置在只读存储器中的函数。
110.在示例性的实施例中,获取存储模块701用于获取与目标函数对应的补丁函数,并将该补丁函数存入数据可修改的存储器中。
111.在示例性的实施例中,获取存储模块701用于获取与目标函数对应的新补丁函数,将新补丁函数存入数据可修改的存储器中,当新补丁函数在数据可修改的存储器中的起始地址与原始的补丁函数在数据可修改的存储器中的起始地址不同时,将内存变量中的地址修改为指向新补丁函数的地址。
112.在示例性的实施例中,获取存储模块701用于在确定新补丁函数所需占用的内存空间大小小于等于原始的补丁函数占用的内存空间大小时,从数据可修改的存储器中删除原始的补丁函数,并将新补丁函数存入原始的补丁函数的位置上;新补丁函数在数据可修改的存储器中的起始地址与原始的补丁函数在数据可修改的存储器中的起始地址相同;在确定新补丁函数所需占用的内存空间大小大于原始的补丁函数占用的内存空间大小时,将新补丁函数存入可容纳新补丁函数的空闲空间,空闲空间为数据可修改的存储器中的空闲存储空间。
113.在示例性的实施例中,获取存储模块701用于存储新补丁函数,修改模块702用于将内存变量中的地址修改为指向新补丁函数的地址。
114.需要理解的是,出于描述简洁的考量,部分实施例一中描述过的内容在本实施例中不再赘述。
115.实施例三:
116.基于同一发明构思,本技术实施例提供一种嵌入式系统,请参见图8所示,包括处理器801和存储器802,所述存储器802中存储有计算机程序,所述处理器801执行所述计算机程序,以实现上述实施例一中方法的步骤,在此不再赘述。
117.可以理解,图8所示的结构仅为示意,嵌入式系统还可包括比图8中所示更多或者更少的组件,或者具有与图8所示不同的配置。
118.处理器801可以是一种集成电路芯片,具有信号处理能力。上述处理器801可以是通用处理器,包括cpu、np(网络处理器)等;还可以是dsp(数字信号处理器)、asic(专用集成电路)、fpga(现成可编程门阵列)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。其可以实现或者执行本技术实施例中公开的各种方法、步骤及逻辑框图。
119.存储器802可以包括但不限于ram(随机存取存储器),rom(只读存储器),prom(可编程只读存储器),eprom(可擦除只读存储器),eeprom(电可擦除只读存储器)等。
120.本实施例还提供了一种计算机可读存储介质,如软盘、光盘、硬盘、闪存、u盘、sd(安全数码)卡、mmc(多媒体)卡等,在该计算机可读存储介质中存储有实现上述各个步骤的一个或者多个程序,这一个或者多个程序可被一个或者多个处理器执行,以实现上述各实施例中方法的各步骤,在此不再赘述。
121.上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
122.通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方
法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。
123.以上所述仅为本技术的实施例而已,并不用于限制本技术的保护范围,对于本领域的技术人员来说,本技术可以有各种更改和变化。凡在本技术的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本技术的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献