CN110851181B - 数据处理方法、装置及计算设备 - Google Patents
数据处理方法、装置及计算设备 Download PDFInfo
- Publication number
- CN110851181B CN110851181B CN201810950160.0A CN201810950160A CN110851181B CN 110851181 B CN110851181 B CN 110851181B CN 201810950160 A CN201810950160 A CN 201810950160A CN 110851181 B CN110851181 B CN 110851181B
- Authority
- CN
- China
- Prior art keywords
- function
- address
- memory
- stub
- memory address
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000003672 processing method Methods 0.000 title claims abstract description 20
- 230000006870 function Effects 0.000 claims abstract description 866
- 238000012545 processing Methods 0.000 claims abstract description 41
- 238000000034 method Methods 0.000 claims description 30
- 238000004590 computer program Methods 0.000 claims description 16
- 238000013507 mapping Methods 0.000 claims description 6
- 238000010586 diagram Methods 0.000 description 8
- 230000008569 process Effects 0.000 description 7
- 238000004891 communication Methods 0.000 description 6
- 230000000694 effects Effects 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 3
- 238000003491 array Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 238000004883 computer application Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
- G06F9/35—Indirect addressing
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本申请实施例提供一种数据处理方法、装置及计算设备,其中,确定待替换原函数及所述原函数对应的目标函数;从在内存创建的至少一个函数桩中选择一未分配函数桩,并确定所述未分配函数桩对应的第一内存地址;其中,所述第一内存地址关联的第二内存地址用以在调用所述原函数时写入所述目标函数的函数地址;建立所述原函数与所述第一内存地址的对应关系;其中,所述对应关系用于调用所述原函数时查找所述原函数对应的函数桩;所述原函数对应的函数桩用于从所述第二内存地址中获取所述函数地址,并基于所述函数地址调用所述目标函数。本申请实施例提供的技术方案实现了有效的、高性能的函数替换。
Description
技术领域
本申请实施例涉及计算机应用技术领域,尤其涉及一种数据处理方法、装置及计算设备。
背景技术
应用程序中包括大量函数,用于在应用程序运行过程中被调用以实现开发人员定义的执行操作,完成应用程序提供的业务功能。
而随着业务发展,应用程序中某些函数可能不再适合当前业务,或者某些函数存在错误,导致应用程序出现运行故障,这些函数就需要进行替换,以保证应用程序的正常运行。
目前的一种函数替换方式,是通过预先穷举所有可能的情况,在应用程序中提前实现好某一个原函数对应的所有可能的替换函数,在需要进行函数替换时,再进行查找替换,然而由于无法预知应用程序中哪些函数可能需要替换,而且提取实现好的替换函数随着业务发展也可能无法使用,因此目前的这种函数替换方式性能较低。
发明内容
本申请实施例提供一种数据处理方法、装置及计算设备,用以解决现有技术中函数替换性能以及有效性较低的技术问题。
第一方面,本申请实施例中提供了一种数据处理方法,包括
确定待替换原函数及所述原函数对应的目标函数;
从在内存创建的至少一个函数桩中选择一未分配函数桩,并确定所述未分配函数桩对应的第一内存地址;其中,所述第一内存地址关联的第二内存地址用以在调用所述原函数时写入所述目标函数的函数地址;
建立所述原函数与所述第一内存地址的对应关系;其中,所述对应关系用于调用所述原函数时查找所述原函数对应的函数桩;所述原函数对应的函数桩用于从所述第二内存地址中获取所述函数地址,并基于所述函数地址调用所述目标函数。
第二方面,本申请实施例中提供了一种数据处理方法,包括
根据函数调用指令,确定请求调用的原函数;
查找所述原函数对应的第一内存地址,并从所述第一内存地址获取所述原函数对应的函数桩;其中,所述函数桩为请求替换所述原函数时为所述原函数分配的,并建立所述原函数与所述第一内存地址的对应关系;
为所述原函数对应的目标函数分配函数地址,并将所述函数地址写入所述第一内存地址关联的第二内存地址;
执行所述函数桩,以从所述第二内存地址处获取所述函数地址,并基于所述函数地址调用所述目标函数。
第三方面,本申请实施例中提供了一种数据处理装置,包括:
第一确定模块,用于确定待替换原函数及所述原函数对应的目标函数;
函数桩分配模块,用于从在内存创建的至少一个函数桩中选择一未分配函数桩,并确定所述未分配函数桩对应的第一内存地址;其中,所述第一内存地址关联的第二内存地址用以在调用所述原函数时写入所述目标函数的函数地址;
关系建立模块,用于建立所述原函数与所述第一内存地址的对应关系;其中,所述对应关系用于调用所述原函数时查找所述原函数对应的函数桩;所述原函数对应的函数桩用于从所述第二内存地址中获取所述函数地址,并基于所述函数地址调用所述目标函数。
第四方面,本申请实施例中提供了一种数据处理装置,包括:
第二确定模块,用于根据函数调用指令,确定请求调用的原函数;
函数桩查找模块,用于查找所述原函数对应的第一内存地址,并从所述第一内存地址获取所述原函数对应的函数桩;其中,所述函数桩为请求替换所述原函数时为所述原函数分配的,并建立所述原函数与所述第一内存地址的对应关系;
地址分配模块,用于为所述原函数对应的目标函数分配函数地址,并将所述函数地址写入所述第一内存地址关联的第二内存地址;
第一调用模块,用于执行所述函数桩,以从所述第二内存地址处获取所述函数地址,并基于所述函数地址调用所述目标函数。
第五方面,本申请实施例中提供了一种计算设备,包括存储组件以及处理组件;
所述存储组件存储一条或多条计算机程序指令;所述一条或多条计算机程序指令以供所述处理组件调用并执行;
所述处理组件用于:
确定待替换原函数及所述原函数对应的目标函数;
从在内存创建的至少一个函数桩中选择一未分配函数桩,并确定所述未分配函数桩对应的第一内存地址;其中,所述第一内存地址关联的第二内存地址用以在调用所述原函数时写入所述目标函数的函数地址;
建立所述原函数与所述第一内存地址的对应关系;其中,所述对应关系用于调用所述原函数时查找所述原函数对应的函数桩;所述原函数对应的函数桩用于从所述第二内存地址中获取所述函数地址,并基于所述函数地址调用所述目标函数。
第六方面,本申请实施例中提供了一种计算设备,包括存储组件以及处理组件;
所述存储组件存储一条或多条计算机程序指令;所述一条或多条计算机程序指令以供所述处理组件调用并执行;
所述处理组件用于:
根据函数调用指令,确定请求调用的原函数;
查找所述原函数对应的第一内存地址,并从所述第一内存地址获取所述原函数对应的函数桩;其中,所述函数桩为请求替换所述原函数时为所述原函数分配的,并建立所述原函数与所述第一内存地址的对应关系;
为所述原函数对应的目标函数分配函数地址,并将所述函数地址写入所述第一内存地址关联的第二内存地址;
执行所述函数桩,以从所述第二内存地址处获取所述函数地址,并基于所述函数地址调用所述目标函数。
本申请实施例中,对于待替换原函数及所述原函数对应的目标函数,首先从在内存创建的至少一个函数桩中选择一未分配函数桩,并确定所述未分配函数桩对应的第一内存地址;其中,所述第一内存地址关联的第二内存地址用以在调用所述原函数时写入所述目标函数的函数地址;建立所述原函数与所述第一内存地址的对应关系;其中,所述对应关系用于调用所述原函数时查找所述原函数对应的函数桩;所述原函数对应的函数桩用于从所述第二内存地址中获取所述函数地址,并基于所述函数地址调用所述目标函数。由于函数替换的目的也即是为了函数调用,本申请实施例中,利用函数桩作为中心函数,将对原函数的调用变更为对目标函数的调用,实现了函数替换效果,且无需修改函数执行参数,也不会造成程序包增大,实现了对程序中任意原函数的替换,因此采用本申请实施例的技术方案实现了有效的、高性能的函数替换。
本申请的这些方面或其他方面在以下实施例的描述中会更加简明易懂。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出了本申请提供的一种数据处理方法一个实施例的流程图;
图2示出了本申请提供的一种数据处理方法又一个实施例的流程图;
图3示出了本申请实施例中在实际应用中的函数调用交互示意图;
图4示出了本申请提供的一种数据处理方法又一个实施例的流程图;
图5示出了本申请提供的一种数据处理方法又一个实施例的流程图;
图6示出了本申请提供的一种数据处理装置一个实施例的结构示意图;
图7示出了本申请提供的一种计算设备一个实施例的结构示意图;
图8示出了本申请提供的一种数据处理装置又一个实施例的结构示意图;
图9示出了本申请提供的一种计算设备又一个实施例的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。
在本申请的说明书和权利要求书及上述附图中的描述的一些流程中,包含了按照特定顺序出现的多个操作,但是应该清楚了解,这些操作可以不按照其在本文中出现的顺序来执行或并行执行,操作的序号如101、102等,仅仅是用于区分开各个不同的操作,序号本身不代表任何的执行顺序。另外,这些流程可以包括更多或更少的操作,并且这些操作可以按顺序执行或并行执行。需要说明的是,本文中的“第一”、“第二”等描述,是用于区分不同的消息、设备、模块等,不代表先后顺序,也不限定“第一”和“第二”是不同的类型。
本申请实施例可以适用于对任意程序中的函数进行替换的应用场景,比如应用程序(application,app)等,在下面的一个或多个实施例中多是以应用程序进行的描述。
为了方便理解,下面首先对本申请实施例中可能出现的技术术语进行相应解释:
函数:指计算机函数,一段可以被调用的代码块。
函数桩:英文名称Stub,是指一段预先构造的特定代码,用以实现特定功能操作。本申请实施例中的函数桩用于实现函数地址查找及调用功能,其具体可以基于汇编指令编译获得。
内存页:操作系统以内存页为单位来管理内存,在ARM64(ARM处理器的一种指令集)设备上一页内存页大小为16KB(千字节),在非ARM64设备上一页内存页大小为4KB(千字节)。
第一内存页:本申请实施例中用以存储函数桩的内存页。
第一内存地址:本申请实施例中是指函数桩在内存中的存储地址。
第二内存页:本申请实施例中用以存储目标函数的函数地址的内存地址。
第二内存地址:本申请实施例中是指目标函数的函数地址在内存中的存储地址。
现有技术中,预先在程序中实现替换函数的方案,不仅会造成程序包增大,而且只能实现部分函数替换,无法实现大规模的函数替换,函数替换操作性能较低。
为了实现大规模、高性能的函数替换,发明人经过一系列研究,提出了本申请的技术方案,在本申请实施例中,首先确定待替换原函数及所述原函数对应的目标函数;从在内存创建的至少一个函数桩中选择一未分配函数桩,并确定所述未分配函数桩对应的第一内存地址;其中,所述第一内存地址关联的第二内存地址用以在调用所述原函数时写入所述目标函数的函数地址;建立所述原函数与所述第一内存地址的对应关系;其中,所述对应关系用于调用所述原函数时查找所述原函数对应的函数桩;所述原函数对应的函数桩用于从所述第二内存地址中获取所述函数地址,并基于所述函数地址调用所述目标函数。由于函数替换的目的也即是为了函数调用,而本申请实施例中,利用函数桩作为中心函数,将对原函数的调用变更为对目标函数的调用,实现了函数替换效果,且无需修改函数执行参数,也不会造成程序包增大,且目标函数也无需预先在程序中实现,需要时下发至程序中即可,且可以实现对程序中任意原函数的替换,因此采用本申请实施例的技术方案实现了大规模、有效的、高性能的函数替换。
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
图1为本申请实施例提供的一种数据处理方法一个实施例的流程图,该方法可以包括以下几个步骤:
101:确定待替换原函数及所述原函数对应的目标函数。
其中,原函数可以是指应用程序中的任意一个原函数。原函数可以是指应用程序在初始编译时设置的函数。
目标函数是指用于替换该原函数的新函数,其可以是在原函数需要替换时,由服务端下发至应用程序中,当然也可以是指应用程序中的其它原函数,如果目标函数为应用程序中的其它原函数,采用本申请的技术方案还可以实现无需重新创建新函数,复用其它原函数,即可以实现对原函数的替换。
可选地,所述确定待替换原函数以及所述原函数对应的目标函数可以包括:
接收服务端下发的函数替换指令;其中,所述函数替换指令包括原函数标识以及目标函数标识;
确定所述原函数标识对应的原函数以及所述目标函数标识对应的用以替换所述原函数的目标函数。
其中,服务端下发的函数替换指令可以是响应于用户触发的替换请求而生成。
此外,所述方法还可以包括:
获取服务端下发的所述目标函数。
作为一种可能的方式,该目标函数可以包含在所述函数替换指令中;
当然,也可以是服务端在应用程序运行过程中以插件等形式下发至应用程序等。
其中,获得函数替换指令之后,可以在应用程序中查找是否存在待替换原函数,如果存在待替换原函数,则可以确定用以替换该原函数的目标函数,并执行如下操作。
102:从在内存创建的至少一个函数桩中选择一未分配函数桩,并确定所述未分配函数桩的第一内存地址。
其中,所述第一内存地址关联的第二内存地址用以在调用所述原函数时写入所述目标函数的函数地址。
未分配函数桩的第一内存地址即为未分配函数桩的存储地址。本申请实施例中,采用“第一内存地址”来区别函数桩的存储地址。
每一个第一内存地址可以关联一个第二内存地址,用于进行数据存储,本申请实施例中即写入用以替换原函数的目标函数的函数地址。本申请实施例中,采用“第二内存地址”来区别函数地址的存储地址。
本申请实施例中,在内存中可以创建至少一个函数桩,以分配给待替换原函数。函数桩为预先构造的特定代码,在内存创建的至少一个函数桩,也即写入内存中的至少一个函数桩,在需要使用函数桩时,即可以将函数桩写入内存中。
103:建立所述原函数与所述第一内存地址的对应关系。
其中,所述对应关系用于调用所述原函数时查找所述原函数对应的函数桩;所述原函数对应的函数桩用于从所述第二内存地址中获取所述函数地址,并基于所述函数地址调用所述目标函数。
建立原函数与所述第一内存地址的对应关系之后,也即将该第一内存地址写入的函数桩分配给该原函数。
可选地,可以具体是将原函数的原函数标识与该第一内存地址的对应保存,从而基于该原函数标识可以查找到原函数对应的第一内存地址。
也即所述建立所述原函数与所述第一内存地址的对应关系可以包括:
确定所述原函数的原函数标识;
建立所述原函数标识与所述第一内存地址的对应关系;
所述对应关系即具体用于调用所述原函数时,从所述原函数的原函数标识对应的第一内存地址获取所述原函数对应的函数桩。
其中,原函数标识可以包括类名以及函数名,表现形式可以为类名-函数名,以根据类名以及函数名实现对某一个函数的唯一标识。
本申请实施例中,从至少一个函数桩中选择一个未分配函数桩分配给该原函数,从而该未分配函数桩的第一内存地址关联的第二内存地址可以具体在调用所述原函数时写入所述目标函数的函数地址。通过建立原函数与第一内存地址的对应关系,可以在调用所述原函数时基于该对应关系,查找所述原函数对应的函数桩;所述原函数对应的函数桩用于从所述第二内存地址中获取所述函数地址,并基于所述函数地址调用所述目标函数。本申请实施例中,利用函数桩作为中心函数,将对原函数的调用变更为对目标函数的调用,实现了函数替换目的,且无需修改函数执行参数,也不会造成程序包增大,且目标函数也无需预先在程序中实现,需要时下发至程序中即可,且可以实现对程序中任意原函数的替换,因此采用本申请实施例的技术方案实现了大规模、高性能的函数替换。
其中,在实际应用中,操作系统以内存页为单位来管理内存,因此,在某些实施例中,所述从在内存创建的至少一个函数桩中选择一未分配函数桩,并确定所述未分配函数桩的第一内存地址可以包括:
从第一内存页写入的至少一个函数桩中选择一未分配函数桩,并确定所述未分配函数桩的第一内存地址;
其中,所述第一内存页关联第二内存页;所述第二内存页中与所述第一内存地址关联的第二内存地址用于写入所述目标函数的函数地址。
为了方便描述上的区分,本申请实施例中,第一内存页中提供的内存地址也即为命名“第一内存地址”,第二内存页中提供的内存地址也即命名为“第二内存地址”。
可选地,为了方便查找函数桩的第一内存地址关联的第二内存地址,该第一内存页与该第二内存页可以为地址连续的两个内存页。此外,该第一内存页的内存地址可以大于该第二内存页的内存地址。
第一内存页与第二内存页之间的寻址方式可以有多种实现可能,比如第一内存页中的第一个第一内存地址对应第二内存页的第一个第二内存地址,第二个第一内存地址对应第二个第二内存地址,以此类推等。
在内存中创建的至少一个函数桩可以具体即是指写入第一内存页的至少一个函数桩。
作为一种可选方式,可以在第一内存页中写入一个函数桩,从而为原函数分配函数桩时,需要重新分配第一内存页以及第二内存页。因此,所述从第一内存页写入的至少一个函数桩中选择一未分配函数桩,并确定所述未分配函数桩的第一内存地址可以包括:
在内存中分配一第一内存页以及一第二内存页;可选地,可以是分配内存地址连续的第一内存页以及第二内存页;其中,所述第一内存页的内存地址大于所述第二内存页的内存地址;并通过内存地址映射,将所述第一内存页执行权限修改为可执行,第一内存页执行权限修改为可执行之后,才可以在第一内存页中写入代码;
确定所述第一内存页以及所述第二内存页的寻址方式;所述寻址方式用以查找所述第二内存页中,与所述第一内存页的任意第一内存地址关联的第二内存地址。
在所述第一内存页中写入一函数桩,并确定该未分配函数桩的第一内存地址。
此外,为了提高处理效率等,作为另一种可选方式,可以在第一内存页中写入多个函数桩,而由于每个内存页的存储空间有限,在ARM64设备上一页内存页大小为16KB,在非ARM64设备上一页内存页大小为4KB。第一内存页中的多个函数桩可能均已分配给一原函数。
因此,所述从第一内存页写入的至少一个函数桩中查找一未分配函数桩,并确定所述未分配函数桩的第一内存地址可以包括:
查找内存已分配的第一内存页中是否存在未分配函数桩;
如果是,选择一未分配函数桩,并确定所述未分配函数桩的第一内存地址;
如果否,在内存中重新分配一第一内存页以及一第二内存页;
确定重新分配的所述第一内存页以及所述第二内存页的寻址方式;所述寻址方式用以查找所述第二内存页中,与所述第一内存页的任意第一内存地址关联的第二内存地址。
在重新分配的所述第一内存页中写入至少一个函数桩,并从所述至少一个函数桩中选择一未分配函数桩及确定所述未分配函数桩的第一内存地址。
也即,如果内存已分配的第一内存页中没有未分配函数桩,此时,即可以在内存中重新分配一第一内存页以及一第二内存页。
在某些实施例中,所述重新分配第一内存页以及第二内存页可以包括:
重新分配内存地址连续的第一内存页以及第二内存页;其中,所述第一内存页的内存地址大于所述第二内存页的内存地址;
通过内存地址映射,将所述第一内存页执行权限修改为可执行。
其中,通过内存地址映射,将所述第一内存页执行权限修改为可执行可以具体是通过vm_deallocate释放所述第一内存页,并通过vm_remap将所述第一内内存页进行内存地址映射,以将其执行权限修改为可执行,使其可以写入代码。
由上述描述可知,本申请实施例中可以是在应用程序运行过程中,动态创建函数桩,而无需预先在应用程序中放置太多函数桩,再无可用函数桩时,再动态创建即可,从而不会导致应用程序的程序包括较大,且方便扩展,无需预先在应用程序中提供函数定义的、能够不依赖函数签名、返回值等特定信息的、可以实现大规模的对任意函数进行替换。
本申请实施例中,采用函数桩作为中心函数,将待替换原函数与函数桩绑定,可以避免函数递归死循环调用,造成应用程序的崩溃。
另外,函数桩可以具体是基于汇编指令预先编译获得,从而采用本申请实施例的技术方案,无需关心上层编程语言涉及的参数类型、参数个数以及参数返回值,直接可以从最底层执行,通过执行函数桩,即可以查找目标函数的函数地址,并据此发起对目标函数的调用。
此外,在某些实施例中,建立所述原函数的原函数标识与所述第一内存地址的对应关系之后,所述方法还可以包括:
根据针对所述原函数的函数调用指令,从所述第一内存地址获取所述原函数对应的函数桩;
为所述目标函数分配函数地址,并将所述函数地址写入所述第二内存地址;
执行所述函数桩,以从所述第二内存地址获取所述函数地址,并基于所述函数地址调用所述目标函数。
也即,如果在应用程序运行过程中发起对原函数的函数调用指令,则可以基于该对应关系,获得原函数的函数桩,进而通过执行该函数桩,可以从原函数的函数桩的第一内存地址关联的第二内存地址中获得为目标函数分配的函数地址,从而基于函数地址调用目标函数,对原函数的调用变更为对目标函数的调用,实现了采用目标函数替换原函数的目的,无需修改函数执行参数,即可以实现高性能的函数替换。
在一个实际应用中,应用程序在电子设备中安装并运行,应用程序中可以集成SDK(Software Development Kit,软件工具开发包)以实现函数替换操作,如图2中所示,在应用程序运行时,检测是否存在待替换原函数201,若存在待替换原函数,则可以确定所述原函数对应的目标函数202以及检测是否存在未分配函数桩203;其中,可以是从内存已分配的第一内存页中检测是否存在未分配函数桩。如果存在未分配函数桩,则可以选择一未分配函数桩,并确定所述未分配函数桩的第一内存地址204;如果不存在未分配函数桩,则可以重新分配一第一内存页以及一第二内存页205,在重新分配的所述第一内存页中写入至少一个函数桩206,并从所述至少一个函数桩中选择一未分配函数桩以及确定所述未分配函数桩的第一内存地址207,其中,第一内存页以及第二内存页对应有寻址方式,确定重新分配的所述第一内存页以及所述第二内存页的寻址方式;所述寻址方式用以查找所述第二内存页中,与所述第一内存页的任意第一内存地址关联的第二内存地址。
确定原函数对应函数桩的第一内存地址之后,即可以建立原函数与该函数桩的第一内存地址的对应关系208,具体可以将原函数标识与第一内存地址对应保存,实现将原函数与其对应函数桩绑定的目的。
之后,如图3所示的函数调用示意图中,若存在针对所述原函数的函数调用指令,则可以根据该函数调用指令,从所述第一内存地址获取所述原函数对应的函数桩301。第一内存页31包括多个代码段,每个代码段用以写入一个函数桩;第二内存页32包括多个数据段,每个数据段用以写入函数地址。第一个内存页的多个代码段可以从第一内存页的开始位置开始设置编号,第二内存页的多个数据段从第二内存页的开始位置开始设置编号,则第一内存页与第二内存页的寻址方式可以编号相同的代码段与数据段的地址相关联。例如原函数的函数桩位于第一内存页的第一个代码段,则为目标函数分配的函数地址,可以写入第二内存页的第二个数据段中,代码段对应第一内存地址,数据段对应第二内存地址,从而即可以确定第一内存地址与第二内存地址的关联关系。
之后,获得原函数对应的函数桩,并为所述目标函数分配函数地址,且将所述函数地址写入所述第二内存地址之后,通过执行函数桩,即可以从第二内存页32的第二内存地址处获取所述函数地址302,并基于所述函数地址调用所述目标函数303。
图4为本申请实施例提供的一种数据处理方法又一个实施例的流程图,本实施例从函数调用角度对本申请技术方案进行描述。
该方法可以包括以下几个步骤:
401:根据函数调用指令,确定请求调用的原函数。
该原函数可以是指应用程序中的任意一个原函数。
本申请实施例中,对于应用程序中请求调用的每一个原函数,均可以执行以下操作。
402:查找所述原函数对应的第一内存地址,并从所述第一内存地址获取所述原函数对应的函数桩。
其中,所述函数桩为请求替换所述原函数时为所述原函数分配的,并建立所述原函数与所述第一内存地址的对应关系。第一内存地址也即是指函数桩在内存中的存储地址。
原函数与其对应函数桩的第一内存地址对应关系的具体建立方式可以参见上述实施例中所述,在此不再赘述。
另外,由于应用程序不是所有原函数均需要进行替换,因此,可选地,如果不存在所述原函数对应的第一内存地址,为所述原函数分配函数地址以调用所述原函数。如果没有原函数对应的第一内存地址,表明该原函数并不需要替换,可以直接为其分配函数地址并进行调用即可。
403:为所述原函数对应的目标函数分配函数地址,并将所述函数地址写入所述第一内存地址关联的第二内存地址。
应用程序运行过程中,需要将函数调用到内存中才可以发起对函数的调用,因此需要首先为目标函数分配函数地址,该函数地址也即是指目标函数的内存地址。
为目标函数分配函数地址之后,将其写入原函数的函数桩的第一内存地址关联的第二内存地址中。
405:执行所述函数桩,以从所述第二内存地址处获取所述函数地址,并基于所述函数地址调用所述目标函数。
该函数桩为预先构造的特定代码,其实现功能即为函数地址查找及函数调用,因此通过执行原函数对应的该函数桩,即可以从第一内存地址关联的第二内存地址中获取目标函数的函数地址,并基于该函数地址调用目标函数。
本申请实施例中,利用函数桩作为中心函数,将对原函数的调用变更为对目标函数的调用,实现了函数替换目的,且无需修改函数执行参数,也不会造成程序包增大,且目标函数也无需预先在程序中实现,需要时下发至程序中即可,且可以实现对程序中任意原函数的替换,因此采用本申请实施例的技术方案实现了大规模、高性能的函数替换。
由于,操作系统以内存页为单位来管理内存,因此,在某些实施例中,所述查找所述原函数对应的第一内存地址,并从所述第一内存地址获取所述原函数对应的函数桩可以包括:
从第一内存页中查找所述原函数对应的第一内存地址,并从所述第一内存地址获取所述原函数对应的函数桩;
所述为所述原函数对应的目标函数分配函数地址,并将所述函数地址写入所述第一内存地址关联的第二内存地址可以包括:
为所述原函数对应的目标函数分配函数地址;
确定所述第一内存页关联的第二内存页;
将所述第二函数地址写入所述第二内存页中所述第一内存地址关联的第二内存地址。
其中,第一内存页以及第二内存页的分配可以参见上述实施例中所述,在此不再赘述。
此外,本申请实施例还提供了一种数据处理方法,如图5所示,该方法具体由服务端执行,具体可以包括以下几个步骤:
501:确定待替换原函数及所述原函数对应的目标函数。
502:针对所述原函数以及所述原函数对应的目标函数,向应用程序发送函数替换指令。
其中,应用程序即可以基于函数替换指令,确定待替换原函数及所述原函数对应的目标函数;从在内存创建的至少一个函数桩中选择一未分配函数桩,并确定所述未分配函数桩对应的第一内存地址;其中,所述第一内存地址关联的第二内存地址用以在调用所述原函数时写入所述目标函数的函数地址;建立所述原函数与所述第一内存地址的对应关系;其中,所述对应关系用于调用所述原函数时查找所述原函数对应的函数桩;所述原函数对应的函数桩用于从所述第二内存地址中获取所述函数地址,并基于所述函数地址调用所述目标函数。
该函数替换指令中可以包括该原函数的原函数标识,以及该原函数对应目标函数的目标函数标识。
应用程序的可执行操作可以参见图1~图4所示实施例中所述,在此不再赘述。
图6为本申请实施例提供的一种数据处理装置一个实施例的结构示意图,该装置可以作为SDK集成到应用程序中,该装置可以包括:
第一确定模块601,用于确定待替换原函数及所述原函数对应的目标函数;
函数桩分配模块602,用于从在内存创建的至少一个函数桩中选择一未分配函数桩,并确定所述未分配函数桩对应的第一内存地址;其中,所述第一内存地址关联的第二内存地址用以在调用所述原函数时写入所述目标函数的函数地址;
关系建立模块603,用于建立所述原函数与所述第一内存地址的对应关系;其中,所述对应关系用于调用所述原函数时查找所述原函数对应的函数桩;所述原函数对应的函数桩用于从所述第二内存地址中获取所述函数地址,并基于所述函数地址调用所述目标函数。
在某些实施例中,所述函数桩确定模块具体用于:
从第一内存页写入的至少一个函数桩中选择一未分配函数桩,并确定所述未分配函数桩的第一内存地址;其中,所述第一内存页关联第二内存页;所述第二内存页中与所述第一内存地址关联的第二内存地址用于写入所述目标函数的函数地址。
在某些实施例中,所述函数桩确定模块具体用于:
查找内存已分配的第一内存页中是否存在未分配函数桩;
如果是,选择一未分配函数桩,并确定所述未分配函数桩的第一内存地址;
如果否,重新分配一第一内存页以及一第二内存页;
确定重新分配的所述第一内存页以及所述第二内存页的寻址方式;所述寻址方式用以查找所述第二内存页中,与所述第一内存页的任意第一内存地址关联的第二内存地址;
在重新分配的所述第一内存页中写入至少一个函数桩,并从所述至少一个函数桩中选择一未分配函数桩以及确定所述未分配函数桩的第一内存地址。
在某些实施例中,所述第一确定模块具体用于:
接收服务端下发的函数替换指令;其中,所述函数替换指令包括原函数标识以及目标函数标识;
确定所述原函数标识对应的原函数以及所述目标函数标识对应的用以替换所述原函数的目标函数。
此外,该装置还可以包括:
获取模块,用于获取服务端下发的所述目标函数,其中,该目标函数可以包含于所述函数替换指令中。
在某些实施例中,所述函数桩确定模块重新分配第一内存页以及第二内存页具体是:
重新分配内存地址连续的第一内存页以及第二内存页;其中,所述第一内存页的内存地址大于所述第二内存页的内存地址;
通过内存地址映射,将所述第一内存页执行权限修改为可执行。
在某些实施例中,所述关系建立模块可以具体用于:
确定所述原函数的原函数标识;
建立所述原函数标识与所述第一内存地址的对应关系;
其中,所述对应关系具体用于调用所述原函数时,从所述原函数的原函数标识对应的第一内存地址获取所述原函数对应的函数桩。
可选地,所述函数桩基于汇编指令预先编译获得。
此外,在某些实施例中,该装置还可以包括:
函数调用模块,用于根据针对所述原函数的函数调用指令,从所述第一内存地址获取所述原函数对应的函数桩;
为所述目标函数分配函数地址,并将所述函数地址写入所述第二内存地址;
执行所述函数桩,以从所述第二内存地址获取所述函数地址,并基于所述函数地址调用所述目标函数。
图6所述的数据处理装置可以执行图1、图2或图3所示实施例所述的数据处理方法,其实现原理和技术效果不再赘述。
在一个可能的设计中,本申请实施例还提供了一种计算设备,该计算设备在实际应用中可以为可以安装并运行应用程序的各种终端等,如图7所述,该计算设备可以包括存储组件701以及处理组件702;
所述存储组件701存储一条或多条计算机程序指令;所述一条或多条计算机程序指令以供所述处理组件702调用并执行;
所述处理组件702用于:
确定待替换原函数及所述原函数对应的目标函数;
从在内存创建的至少一个函数桩中选择一未分配函数桩,并确定所述未分配函数桩对应的第一内存地址;其中,所述第一内存地址关联的第二内存地址用以在调用所述原函数时写入所述目标函数的函数地址;
建立所述原函数与所述第一内存地址的对应关系;其中,所述对应关系用于调用所述原函数时查找所述原函数对应的函数桩;所述原函数对应的函数桩用于从所述第二内存地址中获取所述函数地址,并基于所述函数地址调用所述目标函数。
其中,处理组件702可以包括一个或多个处理器来执行计算机指令,以完成上述的方法中的全部或部分步骤。当然处理组件也可以为一个或多个应用专用集成电路(ASIC)、数字信号处理器(DSP)、数字信号处理设备(DSPD)、可编程逻辑器件(PLD)、现场可编程门阵列(FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述方法。
存储组件701被配置为存储各种类型的数据以支持在计算设备的操作。存储组件可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。
当然,计算设备必然还可以包括其他部件,例如输入/输出接口、通信组件等。输入/输出接口为处理组件和外围接口模块之间提供接口,上述外围接口模块可以是输出设备、输入设备等。通信组件被配置为便于计算设备和其他设备,例如服务器之间有线或无线方式的通信等。
本申请实施例还提供了一种计算机可读存储介质,存储有计算机程序,所述计算机程序被计算设备执行时可以实现上述图1~图3任一实施例的数据处理方法。
图8为本申请实施例提供的一种数据处理装置又一个实施例的结构示意图,图7以及图8的数据处理装置可以集成为以集成到应用程序中,该装置可以包括:
第二确定模块801,用于根据函数调用指令,确定请求调用的原函数;
函数桩查找模块802,用于查找所述原函数对应的第一内存地址,并从所述第一内存地址获取所述原函数对应的函数桩;其中,所述函数桩为请求替换所述原函数时为所述原函数分配的,并建立所述原函数与所述第一内存地址的对应关系;
地址分配模块803,用于为所述原函数对应的目标函数分配函数地址,并将所述函数地址写入所述第一内存地址关联的第二内存地址;
第一调用模块804,用于执行所述函数桩,以从所述第二内存地址处获取所述函数地址,并基于所述函数地址调用所述目标函数。
在某些实施例中,所述函数桩查找模块可以具体用于:
从第一内存页中查找所述原函数对应的第一内存地址,并从所述第一内存地址获取所述原函数对应的函数桩;
所述地址分配模块可以具体用于:
为所述原函数对应的目标函数分配函数地址;
确定所述第一内存页关联的第二内存页;
将所述第二函数地址写入所述第二内存页中所述第一内存地址关联的第二内存地址。
在某些实施例中,该装置还可以包括:
第二调用模块,用于如果不存在所述原函数对应的第一内存地址,为所述原函数分配函数地址以调用所述原函数。
图8所述的数据处理装置可以执行图4所示实施例所述的数据处理方法,其实现原理和技术效果不再赘述。
在一个可能的设计中,本申请实施例还提供了一种计算设备,该计算设备在实际应用中可以为可以安装并运行应用程序的各种终端等,如图9所述,该计算设备可以包括存储组件901以及处理组件902;
其中,图9所示计算设备与图7所述计算设备可以为同一计算设备;
所述存储组件901存储一条或多条计算机程序指令;所述一条或多条计算机程序指令以供所述处理组件902调用并执行;
所述处理组件902用于:
根据函数调用指令,确定请求调用的原函数;
查找所述原函数对应的第一内存地址,并从所述第一内存地址获取所述原函数对应的函数桩;其中,所述函数桩为请求替换所述原函数时为所述原函数分配的,并建立所述原函数与所述第一内存地址的对应关系;
为所述原函数对应的目标函数分配函数地址,并将所述函数地址写入所述第一内存地址关联的第二内存地址;
执行所述函数桩,以从所述第二内存地址处获取所述函数地址,并基于所述函数地址调用所述目标函数。
其中,处理组件902可以包括一个或多个处理器来执行计算机指令,以完成上述的方法中的全部或部分步骤。当然处理组件也可以为一个或多个应用专用集成电路(ASIC)、数字信号处理器(DSP)、数字信号处理设备(DSPD)、可编程逻辑器件(PLD)、现场可编程门阵列(FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述方法。
存储组件901被配置为存储各种类型的数据以支持在终端的操作。存储组件可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。
当然,计算设备必然还可以包括其他部件,例如输入/输出接口、通信组件等。输入/输出接口为处理组件和外围接口模块之间提供接口,上述外围接口模块可以是输出设备、输入设备等。通信组件被配置为便于计算设备和其他设备之间有线或无线方式的通信等。
本申请实施例还提供了一种计算机可读存储介质,存储有计算机程序,所述计算机程序被计算设备执行时可以实现上述图4所示实施例的数据处理方法。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。
Claims (16)
1.一种数据处理方法,其特征在于,包括:
确定待替换原函数及所述原函数对应的目标函数;
从在内存创建的至少一个函数桩中选择一未分配函数桩,并确定所述未分配函数桩对应的第一内存地址;其中,所述第一内存地址关联的第二内存地址用以在调用所述原函数时写入所述目标函数的函数地址;
建立所述原函数与所述第一内存地址的对应关系;其中,所述对应关系用于调用所述原函数时查找所述原函数对应的函数桩;所述原函数对应的函数桩用于从所述第二内存地址中获取所述函数地址,并基于所述函数地址调用所述目标函数。
2.根据权利要求1所述的方法,其特征在于,所述从在内存创建的至少一个函数桩中选择一未分配函数桩,并确定所述未分配函数桩的第一内存地址包括:
从第一内存页写入的至少一个函数桩中选择一未分配函数桩,并确定所述未分配函数桩的第一内存地址;其中,所述第一内存页关联第二内存页;所述第二内存页中与所述第一内存地址关联的第二内存地址用于写入所述目标函数的函数地址。
3.根据权利要求2所述的方法,其特征在于,所述从第一内存页写入的至少一个函数桩中查找一未分配函数桩,并确定所述未分配函数桩的第一内存地址包括:
查找内存已分配的第一内存页中是否存在未分配函数桩;
如果是,选择一未分配函数桩,并确定所述未分配函数桩的第一内存地址;
如果否,重新分配一第一内存页以及一第二内存页;
确定重新分配的所述第一内存页以及所述第二内存页的寻址方式;所述寻址方式用以查找所述第二内存页中,与所述第一内存页的任意第一内存地址关联的第二内存地址;
在重新分配的所述第一内存页中写入至少一个函数桩,并从所述至少一个函数桩中选择一未分配函数桩以及确定所述未分配函数桩的第一内存地址。
4.根据权利要求1所述的方法,其特征在于,所述确定待替换原函数以及所述原函数对应的目标函数包括:
接收服务端下发的函数替换指令;其中,所述函数替换指令包括原函数标识以及目标函数标识;
确定所述原函数标识对应的原函数以及所述目标函数标识对应的用以替换所述原函数的目标函数。
5.根据权利要求4所述的方法,其特征在于,还包括:
获取服务端下发的所述目标函数。
6.根据权利要求3所述的方法,其特征在于,所述重新分配第一内存页以及第二内存页包括:
重新分配内存地址连续的第一内存页以及第二内存页;其中,所述第一内存页的内存地址大于所述第二内存页的内存地址;
通过内存地址映射,将所述第一内存页执行权限修改为可执行。
7.根据权利要求1所述的方法,其特征在于,所述建立所述原函数与所述第一内存地址的对应关系包括:
确定所述原函数的原函数标识;
建立所述原函数标识与所述第一内存地址的对应关系;
其中,所述对应关系具体用于调用所述原函数时,从所述原函数的函数标识对应的所述第一内存地址获取所述原函数对应的函数桩。
8.根据权利要求1所述的方法,其特征在于,所述函数桩基于汇编指令预先编译获得。
9.根据权利要求1所述的方法,其特征在于,所述建立所述原函数的原函数标识与所述第一内存地址的对应关系之后,所述方法还包括:
根据针对所述原函数的函数调用指令,从所述第一内存地址获取所述原函数对应的函数桩;
为所述目标函数分配函数地址,并将所述函数地址写入所述第二内存地址;
执行所述函数桩,以从所述第二内存地址获取所述函数地址,并基于所述函数地址调用所述目标函数。
10.一种数据处理方法,其特征在于,包括:
根据函数调用指令,确定请求调用的原函数;
查找所述原函数对应的第一内存地址,并从所述第一内存地址获取所述原函数对应的函数桩;其中,所述函数桩为请求替换所述原函数时为所述原函数分配的,并建立所述原函数与所述第一内存地址的对应关系;
为所述原函数对应的目标函数分配函数地址,并将所述函数地址写入所述第一内存地址关联的第二内存地址;
执行所述函数桩,以从所述第二内存地址处获取所述函数地址,并基于所述函数地址调用所述目标函数。
11.根据权利要求10所述的方法,其特征在于,所述查找所述原函数对应的第一内存地址,并从所述第一内存地址获取所述原函数对应的函数桩包括:
从第一内存页中查找所述原函数对应的第一内存地址,并从所述第一内存地址获取所述原函数对应的函数桩;
所述为所述原函数对应的目标函数分配函数地址,并将所述函数地址写入所述第一内存地址关联的第二内存地址包括:
为所述原函数对应的目标函数分配函数地址;
确定所述第一内存页关联的第二内存页;
将所述函数地址写入所述第二内存页中所述第一内存地址关联的第二内存地址。
12.根据权利要求10所述的方法,其特征在于,还包括:
如果不存在所述原函数对应的第一内存地址,为所述原函数分配函数地址以调用所述原函数。
13.一种数据处理装置,其特征在于,包括:
第一确定模块,用于确定待替换原函数及所述原函数对应的目标函数;
函数桩分配模块,用于从在内存创建的至少一个函数桩中选择一未分配函数桩,并确定所述未分配函数桩对应的第一内存地址;其中,所述第一内存地址关联的第二内存地址用以在调用所述原函数时写入所述目标函数的函数地址;
关系建立模块,用于建立所述原函数与所述第一内存地址的对应关系;其中,所述对应关系用于调用所述原函数时查找所述原函数对应的函数桩;所述原函数对应的函数桩用于从所述第二内存地址中获取所述函数地址,并基于所述函数地址调用所述目标函数。
14.一种数据处理装置,其特征在于,包括:
第二确定模块,用于根据函数调用指令,确定请求调用的原函数;
函数桩查找模块,用于查找所述原函数对应的第一内存地址,并从所述第一内存地址获取所述原函数对应的函数桩;其中,所述函数桩为请求替换所述原函数时为所述原函数分配的,并建立所述原函数与所述第一内存地址的对应关系;
地址分配模块,用于为所述原函数对应的目标函数分配函数地址,并将所述函数地址写入所述第一内存地址关联的第二内存地址;
第一调用模块,用于执行所述函数桩,以从所述第二内存地址处获取所述函数地址,并基于所述函数地址调用所述目标函数。
15.一种计算设备,其特征在于,包括存储组件以及处理组件;
所述存储组件存储一条或多条计算机程序指令;所述一条或多条计算机程序指令以供所述处理组件调用并执行;
所述处理组件用于:
确定待替换原函数及所述原函数对应的目标函数;
从在内存创建的至少一个函数桩中选择一未分配函数桩,并确定所述未分配函数桩对应的第一内存地址;其中,所述第一内存地址关联的第二内存地址用以在调用所述原函数时写入所述目标函数的函数地址;
建立所述原函数与所述第一内存地址的对应关系;其中,所述对应关系用于调用所述原函数时查找所述原函数对应的函数桩;所述原函数对应的函数桩用于从所述第二内存地址中获取所述函数地址,并基于所述函数地址调用所述目标函数。
16.一种计算设备,其特征在于,包括存储组件以及处理组件;
所述存储组件存储一条或多条计算机程序指令;所述一条或多条计算机程序指令以供所述处理组件调用并执行;
所述处理组件用于:
根据函数调用指令,确定请求调用的原函数;
查找所述原函数对应的第一内存地址,并从所述第一内存地址获取所述原函数对应的函数桩;其中,所述函数桩为请求替换所述原函数时为所述原函数分配的,并建立所述原函数与所述第一内存地址的对应关系;
为所述原函数对应的目标函数分配函数地址,并将所述函数地址写入所述第一内存地址关联的第二内存地址;
执行所述函数桩,以从所述第二内存地址处获取所述函数地址,并基于所述函数地址调用所述目标函数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810950160.0A CN110851181B (zh) | 2018-08-20 | 2018-08-20 | 数据处理方法、装置及计算设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810950160.0A CN110851181B (zh) | 2018-08-20 | 2018-08-20 | 数据处理方法、装置及计算设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110851181A CN110851181A (zh) | 2020-02-28 |
CN110851181B true CN110851181B (zh) | 2023-04-18 |
Family
ID=69594988
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810950160.0A Active CN110851181B (zh) | 2018-08-20 | 2018-08-20 | 数据处理方法、装置及计算设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110851181B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114518913A (zh) * | 2020-10-31 | 2022-05-20 | 华为技术有限公司 | 程序执行方法、程序处理方法以及相关设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105630491A (zh) * | 2015-12-18 | 2016-06-01 | Tcl集团股份有限公司 | 程序的功能变更方法及装置 |
CN106547580A (zh) * | 2015-09-22 | 2017-03-29 | 腾讯科技(深圳)有限公司 | 挂钩函数的方法和装置 |
CN106991057A (zh) * | 2017-04-11 | 2017-07-28 | 深信服科技股份有限公司 | 一种共享显卡虚拟化中内存的调用方法及虚拟化平台 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8943283B2 (en) * | 2012-08-31 | 2015-01-27 | International Business Machines Corporation | Converting a first address mapping function for mapping addresses to storage locations to a second address mapping function |
US10067864B2 (en) * | 2013-11-27 | 2018-09-04 | Abbott Diabetes Care Inc. | Systems and methods for revising permanent ROM-based programming |
-
2018
- 2018-08-20 CN CN201810950160.0A patent/CN110851181B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106547580A (zh) * | 2015-09-22 | 2017-03-29 | 腾讯科技(深圳)有限公司 | 挂钩函数的方法和装置 |
CN105630491A (zh) * | 2015-12-18 | 2016-06-01 | Tcl集团股份有限公司 | 程序的功能变更方法及装置 |
CN106991057A (zh) * | 2017-04-11 | 2017-07-28 | 深信服科技股份有限公司 | 一种共享显卡虚拟化中内存的调用方法及虚拟化平台 |
Non-Patent Citations (1)
Title |
---|
向勇 ; 曹睿东 ; 毛英明 ; .基于QEMU的动态函数调用跟踪.计算机研究与发展.2017,(07),全文. * |
Also Published As
Publication number | Publication date |
---|---|
CN110851181A (zh) | 2020-02-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5957084B2 (ja) | レジスタの生存を示すコンパイルされたコードの生成 | |
CN105868028B (zh) | 一种进程间共享数据的方法、装置及终端 | |
CN109154908B (zh) | 具有精确垃圾收集报告的动态大小的局部 | |
US20180276120A1 (en) | Manual memory management using lazy patching | |
CN107391038B (zh) | 资料存储型闪存的数据写入方法、闪存及存储介质 | |
US8255431B2 (en) | Managing memory | |
CN110289982A (zh) | 容器应用的扩容方法、装置、计算机设备及存储介质 | |
CN105988875B (zh) | 一种运行进程的方法及装置 | |
CN110225094B (zh) | 负载均衡应用虚拟ip切换方法、装置、计算机设备及存储介质 | |
CN111522659B (zh) | 一种空间使用方法和装置 | |
KR101740317B1 (ko) | 메모리 관리 방법 및 장치 | |
JP2012164350A (ja) | 携帯型データ記憶媒体のメモリ管理 | |
TWI506538B (zh) | 動態記憶體分配技術 | |
CN101484876A (zh) | 多任务虚拟机的堆组织 | |
US12130735B2 (en) | Data writing method and apparatus for flash memory-based system | |
CN106020905A (zh) | 一种微控制器固件开发与更新的方法及系统 | |
CN110851181B (zh) | 数据处理方法、装置及计算设备 | |
CN113791873A (zh) | 一种虚拟机创建方法、计算设备及存储介质 | |
US20130152049A1 (en) | Warning of register and storage area assignment errors | |
CN112199042B (zh) | 存储空间管理方法、装置、芯片、设备及存储介质 | |
US11880301B2 (en) | Enabling efficient guest access to peripheral component interconnect express (PCIe) configuration space | |
CN115408105A (zh) | 一种缺页异常处理方法、装置、设备及存储介质 | |
CN110990018B (zh) | 一种嵌入式系统的编译方法及编译系统 | |
CN110333870B (zh) | Simulink模型变量分配的处理方法、装置及设备 | |
JP5471677B2 (ja) | 仮想ディスク制御システム、方法及びプログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |