CN117251234B - 基于补丁的函数调用方法及装置 - Google Patents
基于补丁的函数调用方法及装置 Download PDFInfo
- Publication number
- CN117251234B CN117251234B CN202311533347.8A CN202311533347A CN117251234B CN 117251234 B CN117251234 B CN 117251234B CN 202311533347 A CN202311533347 A CN 202311533347A CN 117251234 B CN117251234 B CN 117251234B
- Authority
- CN
- China
- Prior art keywords
- function
- patch
- data
- execution file
- file
- 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
- 238000000034 method Methods 0.000 title claims abstract description 51
- 230000006870 function Effects 0.000 claims description 507
- 230000008676 import Effects 0.000 claims description 47
- 230000015654 memory Effects 0.000 claims description 28
- 230000004044 response Effects 0.000 claims description 11
- 239000000758 substrate Substances 0.000 claims 1
- 230000008569 process Effects 0.000 description 7
- 238000006243 chemical reaction Methods 0.000 description 4
- JEIPFZHSYJVQDO-UHFFFAOYSA-N iron(III) oxide Inorganic materials O=[Fe]O[Fe]=O JEIPFZHSYJVQDO-UHFFFAOYSA-N 0.000 description 3
- 238000004519 manufacturing process Methods 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- OKTJSMMVPCPJKN-UHFFFAOYSA-N Carbon Chemical compound [C] OKTJSMMVPCPJKN-UHFFFAOYSA-N 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 229910021389 graphene Inorganic materials 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
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/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
- G06F9/449—Object-oriented method invocation or resolution
-
- 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
Abstract
本申请提供一个或多个实施例提供一种基于补丁的函数调用方法及装置,应用于电子设备,该方法包括:获取预先进行编译的补丁执行文件;加载所述补丁执行文件至所述电子设备的操作系统;响应于针对所述第二WebAssembly二进制文件的函数调用请求,从所述补丁执行文件中获取与被调用的函数对应的数据,完成针对所述函数的函数调用。
Description
技术领域
本申请一个或多个实施例涉及计算机技术领域,尤其涉及一种基于补丁的函数调用方法及装置。
背景技术
WebAssembly是一种低级的类汇编语言,具有紧凑的二进制格式,并可以作为各种高级语言(如Rust、C++、C)的公共编译目标。
基于各种高级语言(如Rust、C++、C)编写的应用,可以被编译成为WebAssembly应用模块,这种WebAssembly应用模块的二进制文件通过在资源受限设备的片内操作系统上的WebAssembly虚拟机进行解释执行。
WebAssembly应用模块以二进制文件的形式存在,其中包含类型段、导入段、函数段、表段、内存段、全局段、导出段、起始段、元素段、代码段、数据段和自定义段。
通常,在资源受限设备中,WebAssembly应用模块已经在生成过程中与操作系统一起加载到设备内,当出现bug需要更新,或需要新增功能时,无法替换已经加载到设备中的函数代码,因此亟需一种针对WebAssembly应用模块的补丁办法。
发明内容
本申请一个或多个实施例提供技术方案如下:
本申请提供一种基于补丁的函数调用方法,应用于电子设备,所述方法包括:
获取补丁执行文件;所述补丁执行文件为从基于目标应用程序的源代码和包含补丁内容的补丁代码共同编译生成的第一WebAssembly二进制文件中提取与待补丁函数相关的数据,重新链接生成的文件;所述补丁执行文件中所述与待补丁函数相关的数据的存储结构与所述目标应用程序的源代码对应的第二WebAssembly二进制文件的存储结构相同;
加载所述补丁执行文件至所述电子设备的操作系统;
响应于针对所述第二WebAssembly二进制文件的函数调用请求,从所述补丁执行文件中获取与被调用的函数对应的数据,完成针对所述函数的函数调用可选的,所述方法还包括:
获取目标应用程序的源代码以及包含补丁内容的补丁代码;
将所述目标应用程序的源代码以及补丁代码共同编译生成第一WebAssembly二进制文件;
基于所述补丁内容,确定所述补丁执行文件包含的至少一个数据段,并从所述第一WebAssembly二进制文件中获取所述与至少一个数据段对应的与待补丁函数相关的数据;
重新链接所述至少一个数据段,生成补丁执行文件。
可选的,所述补丁执行文件包括补丁数据索引表和补丁数据表;所述补丁数据索引表用于存储补丁数据中各个数据段中数据的地址;所述补丁数据表用于存储各个数据段中的数据;
所述重新链接所述至少一个数据段,生成补丁执行文件,包括:
将所述与至少一个数据段对应的与待补丁函数相关的数据存储至补丁数据表,并将所述各个数据段对应的与待补丁函数相关的数据的地址存储至补丁数据索引表;
链接所述补丁数据索引表和所述补丁数据表,生成补丁执行文件。
可选的,所述从所述补丁执行文件中获取与被调用的函数对应的数据,完成针对所述函数的函数调用,包括:
确定被调用的函数的函数索引是否大于第二WebAssembly二进制文件中函数总数以及导入函数的和;
如果是,从所述补丁执行文件中的函数段或导入段获取与所述函数对应的数据,完成针对所述函数的函数调用;
如果否,从所述补丁执行文件中确定是否包含与所述函数对应的数据;
如果是,从所述补丁执行文件中的函数补丁表中获取与所述函数对应的数据,完成针对所述函数的函数调用,反之,从第二WebAssembly二进制文件中的函数段获取与所述函数对应的数据,完成针对所述函数的函数调用。
可选的,所述方法还包括:
确定所述补丁执行文件中是否包含导入段;
如果是,计算第二 WebAssembly二进制文件中函数总数以及导入函数的和,并将被调用的函数的函数索引与函数总数以及导入函数的和相减,进一步确定计算得到的函数索引是否小于所述补丁执行文件中导入函数的个数;
如果是,从所述补丁执行文件中的导入段获取与所述函数对应的数据,完成针对所述函数的函数调用;反之,从所述补丁执行文件中的函数段获取与所述函数对应的数据,完成针对所述函数的函数调用。
可选的,所述方法还包括:
响应于以函数指针方式针对所述第二WebAssembly二进制文件的函数调用请求,从所述补丁执行文件的元素段获取所述函数的函数索引,并基于所述函数索引调用所述函数。
可选的,所述方法还包括:
响应于针对所述第二WebAssembly二进制文件的入口函数的函数调用请求,从所述补丁执行文件中获取所述入口函数的函数地址,并基于所述函数地址调用所述函数。
本申请还提供一种基于补丁的函数调用装置,所述装置应用于电子设备,所述装置包括:
文件获取单元,用于获取补丁执行文件;所述补丁执行文件为从基于目标应用程序的源代码和包含补丁内容的补丁代码共同编译生成的第一WebAssembly二进制文件中提取与待补丁函数相关的数据,重新链接生成的文件;所述补丁执行文件中所述与待补丁函数相关的数据的存储结构与所述目标应用程序的源代码对应的第二WebAssembly二进制文件的存储结构相同;
文件加载单元,用于加载所述补丁执行文件至所述电子设备的操作系统;
函数调用单元,响应于针对所述第二WebAssembly二进制文件的函数调用请求,从所述补丁执行文件中获取与被调用的函数对应的数据,完成针对所述函数的函数调用。
可选的,所述装置还包括:
补丁生成单元,用于获取目标应用程序的源代码以及包含补丁内容的补丁代码;
将所述目标应用程序的源代码以及补丁代码共同编译生成第一WebAssembly二进制文件;
基于所述补丁内容,确定所述补丁执行文件包含的至少一个数据段,并从所述第一WebAssembly二进制文件中获取所述与至少一个数据段对应的与待补丁函数相关的数据;
重新链接所述至少一个数据段,生成补丁执行文件。
可选的,所述补丁执行文件包括补丁数据索引表和补丁数据表;所述补丁数据索引表用于存储补丁数据中各个数据段中数据的地址;所述补丁数据表用于存储各个数据段中的数据;
所述补丁生成单元,进一步用于将所述与至少一个数据段对应的与待补丁函数相关的数据存储至补丁数据表,并将所述各个数据段对应的与待补丁函数相关的数据的地址存储至补丁数据索引表;
链接所述补丁数据索引表和所述补丁数据表,生成补丁执行文件。
可选的,所述函数调用单元,进一步用于确定被调用的函数的函数索引是否大于第二WebAssembly二进制文件中函数总数以及导入函数的和;
如果是,从所述补丁执行文件中的函数段或导入段获取与所述函数对应的数据,完成针对所述函数的函数调用;
如果否,从所述补丁执行文件中确定是否包含与所述函数对应的数据;
如果是,从所述补丁执行文件中的函数补丁表中获取与所述函数对应的数据,完成针对所述函数的函数调用,反之,从第二WebAssembly二进制文件中的函数段获取与所述函数对应的数据,完成针对所述函数的函数调用。
可选的,所述装置还包括:
导入函数调用单元,用于确定所述补丁执行文件中是否包含导入段;
如果是,可以计算第二 WebAssembly二进制文件中函数总数以及导入函数的和,并将被调用的函数的函数索引与函数总数以及导入函数的和相减,进一步确定计算得到的函数索引是否小于所述补丁执行文件中导入函数的个数;
如果是,从所述补丁执行文件中的导入段获取与所述函数对应的数据。
否则,确定函数索引是否在补丁函数范围内,如果是则从所述补丁执行文件中的函数段获取与所述函数对应的数据。否则按异常处理。
可选的,所述装置还包括:
函数指针调用单元,用于响应于以函数指针方式针对所述第二WebAssembly二进制文件的函数调用请求,确定所述被调用的函数的函数索引是否大于第二 WebAssembly二进制文件中的元素段中元素总数;
如果是,从所述补丁执行文件的元素段获取所述函数的函数索引,并基于所述函数索引调用所述函数。
可选的,所述装置还包括:
入口函数调用单元,
响应于针对所述第二WebAssembly二进制文件的入口函数的函数调用请求,确定所述补丁数据表中是否包括入口函数的函数地址;
如果是,从所述补丁执行文件中获取所述入口函数的函数地址,并基于所述函数地址调用所述函数;反之,从所述第二WebAssembly二进制文件中获取所述入口函数的函数地址。
本申请还提供一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如上述任一项所述方法的步骤。
本申请还提供一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如上述任一项所述方法的步骤。
在以上技术方案中,可以在操作系统外将目标应用程序的源代码和补丁代码共同编译,并重新链接生成补丁执行文件;将补丁执行文件加载至所述电子设备的操作系统,当具有函数调用请求时,操作系统可以确定该函数是否具有补丁,如果是,可以从补丁执行文件中获取与所述函数对应的数据,完成针对所述函数的函数调用。由此,可以实现仅加载轻量级的补丁执行文件,即可以达到功能升级的目的。提升资源受限设备生产效率。
附图说明
下面将对示例性实施例的描述中所需要使用的附图进行说明,其中:
图1是本申请一示例性实施例示出的一种基于补丁的函数调用方法的流程图。
图2是本申请一示例性实施例示出的一种操作系统调用函数时从补丁执行文件中获取数据的流程图。
图3是本申请一示例性实施例示出的一种电子设备的结构示意图。
图4是本申请一示例性实施例示出的一种基于补丁的函数调用装置的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或者相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请一个或多个实施例相一致的所有实施方式。相反,它们仅是与本申请一个或多个实施例的一些方面相一致的例子。
需要说明的是,在其他实施例中并不一定按照本申请示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本申请所描述的更多或者更少。此外,本申请中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本申请中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
为了便于理解,下面先对WebAssembly二进制文件的数据格式进行描述。
WebAssembly是一种字节码格式,它被设计用来在各种平台上运行,它还可以作为各种高级语言(如Rust、C++、C)的公共编译目标,并表现出比其他通用语言更好的运行时性能,该字节码可以实现编写一次到处运行。
模块是WebAssembly程序编译、传输和加载的单位,编译后的WebAssembly模块以二进制格式呈现,二进制文件以.wasm为后缀。
WebAssembly模块通常可以包含应用程序的函数、表、内存、全局变量、导入、导出信息;另外,还包括内存和表的初始化数据以及应用程序的函数。
WebAssembly二进制文件共有11种段。包括类型段、导入段、函数段、表段、内存段、全局段、导出段、起始段、元素段、代码段、数据段、以及自定义段。
其中,类型段,可以列出模块用到的所有函数类型。导入段,可以列出模块所有的导入项目,导出段,可以列出模块所有的导出项,多个模块可以通过导入和导出项链接在一起。模块内的函数信息分开存储在函数段和代码段中,函数段,可以列出模块内所有函数对应类型索引;代码段,可以存储模块内函数的局部变量信息和字节码。函数段和代码段存储的项目数量一致,且一一对应。表段,可以列出模块内定义的所有表,元素段,可以列出表初始化数据。内存段,可以列出模块内定义的所有内存,数据段,可以列出内存初始化数据。全局段,可以列出模块内定义的所有全局变量信息。起始段,可以列出模块的起始函数索引。自定义段,可以存放自定义数据,包括函数名、局部变量名等调试信息和第二方扩展信息等等。
通常,所述WebAssembly二进制文件通常和操作系统一起加载到资源受限的电子设备内,因此无法修改WebAssembly二进制文件中的函数代码,由此无法进行功能升级,从而影响生产效率。
有鉴于此,本申请提出一种加载补丁执行文件,以进行功能升级的技术方案。
请参考图1,图1是本申请一示例性实施例示出的一种基于补丁的函数调用方法。
在本实施例中,上述基于补丁的函数调用方法可以应用于任一电子设备,所述电子设备通常可以为资源受限设备。资源受限设备通常是指电量供应有限,计算能力有限、内存资源有限以及存储容量有限的电子设备。例如智能卡和安全单元(SE)、物联网设备等。所述方法包括以下步骤:
步骤102,获取补丁执行文件;所述补丁执行文件为从基于目标应用程序的源代码和包含补丁内容的补丁代码共同编译生成的第一WebAssembly二进制文件中提取与待补丁函数相关的数据,重新链接生成的文件;所述补丁执行文件中所述与待补丁函数相关的数据的存储结构与所述目标应用程序的源代码对应的第二WebAssembly二进制文件的存储结构相同。
在本说明书中,可以获取补丁执行文件。其中,补丁执行文件通常可以在资源受限的电子设备外,由目标应用程序的源代码和包含补丁内容的补丁代码共同编译生成。
在一种实施方式中,可以在资源受限的电子设备外,获取目标应用程序的源代码,以及包含补丁内容的补丁代码。将所述目标应用程序的源代码和包含补丁内容的补丁代码共同编译,并从编译生成的WebAssembly二进制文件中提取与待补丁函数相关的数据,进一步将所述与待补丁函数相关的数据重新进行链接,生成补丁执行文件。
其中,与所述目标应用程序的源代码对应的WebAssembly二进制文件中可以包含多个数据段,例如函数段、元素段、代码段等等。
将补丁代码和目标应用程序的源代码共同进行编译生成WebAssembly二进制文件,其中补丁代码中可能具有修改后的函数,或是新增的函数对应的数据。因此,补丁执行文件,也可以包含多个数据段,例如函数段、元素段、代码段等等。基于所述补丁内容,可以确定所述补丁执行文件包含的至少一个数据段,并从WebAssembly二进制文件中获取所述与至少一个数据段对应的与待补丁函数相关的数据;重新链接所述至少一个数据段,生成补丁执行文件。其中,补丁执行文件中所述与待补丁函数相关的数据的存储结构,与目标应用程序的源代码编译生成的WebAssembly二进制文件的存储结构相同。
在一种实施方式中,补丁执行文件通常可以包括补丁数据索引表和补丁数据表。补丁数据索引表用于存储补丁数据中各个数据段中数据的地址。补丁数据表用于存储各个数据段中的数据。
请参见表1,表1是一示例性实施例示出的一种补丁数据索引表。
表1
如表1所示,表1中可以包括补丁表地址,也即存储补数据丁表的具体地址。同时也可以存储补丁数据表中,具体的每一个数据段中的地址。例如,导入段地址,函数段地址,元素段地址,代码段地址等等。
由于在一个资源受限的电子设备的操作系统中可以包含多个WebAssembly二进制文件,在进行补丁升级时,可以同时针对多个WebAssembly二进制文件进行升级。因此,在补丁数据索引表中,可以包含多个补丁数据表的地址。
请参见表2,表2是一示例性实施例示出的一种补丁数据表。
表2
如表2所示,补丁数据表可以用于存储各个数据段中的数据。其中,具体各个数据段存储的数据可以根据实际应用需要的数据进行调整,在本说明书中不做具体限定。例如,导入段可以存储导入函数的函数指针,导入函数的签名地址等等。函数段可以存储函数字节码大小,操作数栈大小,参数个数,局部变量个数等等。元素段可以存储函数索引。代码段可以存储补丁代码。
在将所述目标应用程序的源代码和包含补丁内容的补丁代码共同编译后,可以将所述与至少一个数据段对应的与待补丁函数相关的数据存储至补丁数据表,并将所述各个数据段对应的与待补丁函数相关的数据的地址存储至补丁数据索引表。
进一步,链接所述补丁数据索引表和所述补丁数据表,即可生成补丁执行文件。
在一个例子中,将目标应用程序的源代码和包含补丁内容的补丁代码共同编译生成的WebAssembly二进制文件后,可以通过转换工具,执行上述过程。
同时,所述转换工具可以进一步针对生成的WebAssembly二进制文件,将与待补丁函数相关的数据进行函数索引、元素索引、重定位,保证补丁执行文件中的函数索引、元素索引,与目标应用程序的源代码编译生成的WebAssembly二进制文件一致。
其中,重定位的一种方式是目标应用程序的源代码编译生成WebAssembly二进制文件之后,记录了所有函数名对应的索引,变量名对应的索引和偏移。当目标应用程序的源代码和包含补丁内容的补丁代码共同编译时,其中函数名以及变量名不变,根据函数名以及变量名确定目标应用程序的源代码编译生成WebAssembly二进制文件中的函数索引或内存偏移。
需要说明的是,将目标应用程序的源代码和包含补丁内容的补丁代码共同编译,因此无需进行内存偏移的重定位。
当补丁代码中有导入函数时,则补丁执行文件中可以包含导入段,导入段结构与目标应用程序的源代码编译生成WebAssembly二进制文件中的导入段的存储结构一致。新导入函数的索引从与目标应用程序的源代码编译生成WebAssembly二进制文件的函数最大索引值开始编号,该操作由转换工具完成,同时要修改补丁执行文件中的函数索引相关的字节码(call)对应的偏移,如果存在新增元素段,元素段中的函数索引也需要相应调整。
当补丁代码中有新增函数时,则补丁执行文件中可以包含函数段,函数段结构与目标应用程序的源代码编译生成WebAssembly二进制文件中的函数段的存储结构一致。新增函数的函数索引从补丁执行文件的导入函数的索引最大值开始编号,如果补丁中没有导入段,在按照与目标应用程序的源代码编译生成WebAssembly二进制文件的函数最大索引值开始编号,该操作由转换工具完成,同时修改补丁执行文件中的函数索引相关的字节码(call)对应的偏移,如果存在新增元素段,元素段中的函数索引也需要相应调整。
当补丁代码中有新增函数指针操作时,则补丁执行文件中存在元素段,元素段结构与目标应用程序的源代码编译生成WebAssembly二进制文件中的元素的存储结构一致。新增元素索引从与目标应用程序的源代码编译生成WebAssembly二进制文件的元素索引最大值开始编号。
步骤104,加载所述补丁执行文件至所述电子设备的操作系统。
在实际应用中,加载目标应用程序的源代码编译生成的WebAssembly二进制文件至所述电子设备的操作系统需要针对所述WebAssembly二进制文件进行解析、链接等过程。在本说明书中,由于所述补丁执行文件的中所述与待补丁函数相关的数据的存储结构,与目标应用程序的源代码编译生成的WebAssembly二进制文件的存储结构相同。因此,在加载所述补丁执行文件至所述电子设备的操作系统中时,无需解析所述补丁执行文件。
步骤106,响应于针对所述第二WebAssembly二进制文件中的函数的函数调用请求,从所述补丁执行文件中获取与所述函数对应的数据,完成针对所述函数的函数调用。
将所述补丁执行文件加载至所述电子设备的操作系统之后,用户可以发起针对目标应用程序的源代码对应的WebAssembly二进制文件中提供的函数的函数调用请求。
所述资源受限的操作系统可以响应于所述函数调用请求,并可以从补丁执行文件中获取与所述被调用的函数对应的数据,从而完成针对所述函数的函数调用。
在一种实施方式中,由于被调用的函数可能是具有补丁的函数,也可能是没有补丁的函数。同时,被调用的函数还可能是新增的函数,因此可以通过函数索引来确定从原文件获取数据还是从补丁执行文件获取数据。
所述资源受限的操作系统可以确定被调用的函数的函数索引是否大于第二WebAssembly二进制文件中函数总数以及导入函数的和;
如果被调用的函数的函数索引是否大于第二WebAssembly二进制文件中函数总数以及导入函数的和,说明被调用的函数为补丁执行文件中新增加的函数,因此可以从所述补丁执行文件中的函数段或导入段获取与所述函数对应的数据,完成针对所述函数的函数调用;
如果被调用的函数的函数索引是否不大于第二WebAssembly二进制文件中函数总数以及导入函数的和,说明被调用的函数为第二WebAssembly二进制文件中原有的函数,因此需要进一步从所述补丁执行文件中确定所述函数是否具有与所述函数对应的数据;
如果补丁执行文件中具有与所述函数对应的数据,说明补丁执行文件针对该函数进行了补丁,因此可以从所述补丁执行文件中的函数补丁表中获取与所述函数对应的数据,完成针对所述函数的函数调用。
反之,说明补丁执行文件并没有针对该函数进行补丁,因此可以从原有的第二WebAssembly二进制文件中的函数段获取与所述函数对应的数据,完成针对所述函数的函数调用。
在一种实施方式中,补丁执行文件中还可能具有新增导入函数,因此需要进一步根据导入函数的索引判断是否为具有补丁的函数。
所述资源受限设备可以确定所述补丁执行文件中是否包含导入段,如果包含导入段,可以计算第二 WebAssembly二进制文件中函数总数以及导入函数的和,并将被调用的函数的函数索引与函数总数以及导入函数的和相减,进一步确定计算得到的函数索引是否小于补丁执行文件的导入函数的个数。
如果是,说明被调用的函数为导入函数,可以从所述补丁执行文件中的导入段获取与所述函数对应的数据;反之,说明调用的函数并不是导入函数,可以进一步基于函数索引被调用的函数是否具有补丁,并从所述补丁执行文件中的函数段获取与所述函数对应的数据,在此不再赘述。
请参考图2,图2是本申请一示例性实施例示出的一种操作系统调用函数时从补丁执行文件中获取数据的流程图。
如图2所示,操作系统可以响应于针对所述第二WebAssembly二进制文件的函数调用请求。
进一步确定被调用的函数的函数索引是否大于第二WebAssembly二进制文件中函数总数以及导入函数的和。
如果被调用的函数的函数索引不大于第二WebAssembly二进制文件中函数总数以及导入函数的和。说明被调用的函数并不是补丁执行文件中新增的函数,因此需要进一步从所述补丁执行文件中确定所述函数是否具有与所述函数对应的数据。
如果补丁执行文件中包含与所述函数对应的数据,说明该函数具有补丁,因此可以从所述补丁执行文件中的函数段获取与所述函数对应的数据,完成针对所述函数的函数调用。
如果补丁执行文件中不包含与所述函数对应的数据,说明该函数没有补丁,可以从原有的第二WebAssembly二进制文件中的函数段获取与所述函数对应的数据。
如果被调用的函数的函数索引大于第二WebAssembly二进制文件中函数总数以及导入函数的和。说明该函数为补丁执行文件中新增加的函数。需要进一步确定该函数是否为导入函数。
因此可以确定所述补丁执行文件中是否包含导入段,如果所述补丁执行文件不包含导入段,说明该函数一定不是导入函数,因此可以直接从所述补丁执行文件中的函数段获取与所述函数对应的数据,完成针对所述函数的函数调用。
如果所述补丁执行文件中包含导入段,可以计算第二 WebAssembly二进制文件中函数总数以及导入函数的和,并将被调用的函数的函数索引与函数总数以及导入函数的和相减,确定计算得到的函数索引是否小于导入函数的个数,如果计算得到的函数索引小于补丁执行文件文件中导入函数的个数,说明该函数为导入函数,因此可以从所述补丁执行文件中的导入段获取与所述函数对应的数据。反之,说明该函数不是导入函数,因此可以从所述补丁执行文件中的函数段获取与所述函数对应的数据,完成针对所述函数的函数调用。
在一种实施方式中,所述操作系统还可以响应于以函数指针方式针对所述第二WebAssembly二进制文件的函数调用请求,并确定所述被调用的函数的函数索引是否大于第二 WebAssembly二进制文件中的元素段中元素总数;
如果被调用的函数的函数索引大于第二 WebAssembly二进制文件中的元素段中元素总数,则需要从所述补丁执行文件的元素段获取所述函数的函数索引,并基于所述函数索引调用所述函数。
在另一种实施方式中,所述补丁执行文件中的所述补丁数据表还可以直接存储入口函数的函数地址,所述操作系统还可以响应于针对所述第二WebAssembly二进制文件的入口函数的函数调用请求,确定所述补丁数据表中是否包括入口函数的函数地址,如果所述补丁数据表中包括入口函数的函数地址,从所述补丁执行文件中的所述补丁数据表中获取所述入口函数的函数地址,并基于所述函数地址调用所述函数。如果所述补丁数据表中不包括入口函数的函数地址,则从第二WebAssembly二进制文件中获取所述入口函数的函数地址。
在以上技术方案中,可以在操作系统外将目标应用程序的源代码和补丁代码共同编译,并重新链接生成补丁执行文件;将补丁执行文件加载至所述电子设备的操作系统,当具有函数调用请求时,操作系统可以确定该函数是否具有补丁,如果是,可以从补丁执行文件中获取与所述函数对应的数据,完成针对所述函数的函数调用。由此,可以实现仅加载轻量级的补丁执行文件,即可以达到功能升级的目的。提升资源受限设备生产效率。
与前述基于补丁的函数调用方法的实施例相对应,本申请还提供了基于补丁的函数调用装置的实施例。
请参考图3,图3是本申请一示例性实施例示出的一种设备的结构示意图。在硬件层面,该设备包括处理器303、内部总线304、网络接口306、内存308以及非易失性存储器310,当然还可能包括所需要的其他硬件。本申请一个或多个实施例可以基于软件方式来实现,比如由处理器303从非易失性存储器310中读取对应的计算机程序到内存308中然后运行。当然,除了软件实现方式之外,本申请一个或多个实施例并不排除其他实现方式,比如逻辑器件或者软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑模块,也可以是硬件或者逻辑器件。
请参考图4,图4是本申请一示例性实施例示出的一种基于补丁的函数调用装置的框图。
上述基于补丁的函数调用装置可以应用于图3所示的设备,以实现本申请的技术方案。其中,该基于补丁的函数调用装置可以包括:
文件获取单元402,用于获取补丁执行文件;所述补丁执行文件为从基于目标应用程序的源代码和包含补丁内容的补丁代码共同编译生成的第一WebAssembly二进制文件中提取与待补丁函数相关的数据,重新链接生成的文件;所述补丁执行文件中所述与待补丁函数相关的数据的存储结构与所述目标应用程序的源代码对应的第二WebAssembly二进制文件的存储结构相同;
文件加载单元404,用于加载所述补丁执行文件至所述电子设备的操作系统;
函数调用单元406,响应于针对所述第二WebAssembly二进制文件的函数调用请求,从所述补丁执行文件中获取与被调用的函数对应的数据,完成针对所述函数的函数调用。
在本实施例中,所述装置还包括:
补丁生成单元,用于获取目标应用程序的源代码以及包含补丁内容的补丁代码;
将所述目标应用程序的源代码以及补丁代码共同编译生成第一WebAssembly二进制文件;
基于所述补丁内容,确定所述补丁执行文件包含的至少一个数据段,并从所述第一WebAssembly二进制文件中获取所述与至少一个数据段对应的与待补丁函数相关的数据;
重新链接所述至少一个数据段,生成补丁执行文件。
在本实施例中,所述补丁执行文件包括补丁数据索引表和补丁数据表;所述补丁数据索引表用于存储补丁数据中各个数据段中数据的地址;所述补丁数据表用于存储各个数据段中的数据;
所述补丁生成单元,进一步用于将所述与至少一个数据段对应的与待补丁函数相关的数据存储至补丁数据表,并将所述各个数据段对应的与待补丁函数相关的数据的地址存储至补丁数据索引表;
链接所述补丁数据索引表和所述补丁数据表,生成补丁执行文件。
在本实施例中,所述函数调用单元,进一步用于确定被调用的函数的函数索引是否大于第二WebAssembly二进制文件中函数总数以及导入函数的和;
如果是,从所述补丁执行文件中的函数段获取与所述函数对应的数据,完成针对所述函数的函数调用;
如果否,从所述补丁执行文件中确定是否包含与所述函数对应的数据;
如果是,从所述补丁执行文件中的函数段获取与所述函数对应的数据,完成针对所述函数的函数调用,反之,从第二WebAssembly二进制文件中的函数段获取与所述函数对应的数据,完成针对所述函数的函数调用。
在本实施例中,所述装置还包括:
导入函数调用单元,用于确定所述补丁执行文件中是否包含导入段;
如果是,计算第二 WebAssembly二进制文件中函数总数以及导入函数的和,并将被调用的函数的函数索引与函数总数以及导入函数的和相减,进一步确定计算得到的函数索引是否小于所述补丁执行文件中导入函数的个数;
如果是,从所述补丁执行文件中的导入段获取与所述函数对应的数据,完成针对所述函数的函数调用;反之,从所述补丁执行文件中的函数段获取与所述函数对应的数据,完成针对所述函数的函数调用。
在本实施例中,所述装置还包括:
函数指针调用单元,用于响应于以函数指针方式针对所述第二WebAssembly二进制文件的函数调用请求,确定所述被调用的函数的函数索引是否大于第二 WebAssembly二进制文件中的元素段中元素总数;
如果是,从所述补丁执行文件的元素段获取所述函数的函数索引,并基于所述函数索引调用所述函数。
在本实施例中,所述装置还包括:
入口函数调用单元,用于响应于针对所述第二WebAssembly二进制文件的入口函数的函数调用请求,确定所述补丁数据表中是否包括入口函数的函数地址;
如果是,从所述补丁执行文件中获取所述入口函数的函数地址,并基于所述函数地址调用所述函数;反之,从所述第二WebAssembly二进制文件中获取所述入口函数的函数地址。
对于装置实施例而言,其基本对应于方法实施例,因此相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请的技术方案的目的。
上述实施例阐明的系统、装置、模块或者单元,具体可以由计算机芯片或者实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
在一个典型的配置中,计算机包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或者闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或者技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或者其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或者其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或者其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或者其他磁性存储设备或者任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
上述对本申请特定实施例进行了描述。其他实施例在本申请的范围内。在一些情况下,在本申请中记载的动作或者步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
在本申请一个或多个实施例中所使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请一个或多个实施例。单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。术语“和/或”是指并包含一个或多个相关联的列出项目的任何或者所有可能组合。
在本申请一个或多个实施例中所使用的术语“一个实施例”、“一些实施例”、“示例”、“具体示例”或者“一种实施方式”等的描述意指结合该实施例所描述的具体特征或者特点包含于本申请的至少一个实施例中。对这些术语的示意性描述不必须针对相同的实施例。而且,所描述的具体特征或者特点可以在本申请一个或多个实施例中以合适的方式结合。此外,在不相互矛盾的情况下,可以将不同的实施例以及不同实施例中的具体特征或者特点进行结合。
应当理解,尽管在本申请一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或者“当……时”或者“响应于确定”。
以上所述仅为本申请一个或多个实施例的较佳实施例而已,并不用以限制本申请一个或多个实施例,凡在本申请一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请一个或多个实施例保护的范围之内。
Claims (10)
1.一种基于补丁的函数调用方法,其特征在于,应用于电子设备,所述方法包括:
获取补丁执行文件;所述补丁执行文件为从基于目标应用程序的源代码和包含补丁内容的补丁代码共同编译生成的第一WebAssembly二进制文件中提取与待补丁函数相关的数据,重新链接生成的文件;所述补丁执行文件中所述与待补丁函数相关的数据的存储结构与所述目标应用程序的源代码对应的第二WebAssembly二进制文件的存储结构相同;所述补丁执行文件还包括补丁数据索引表和补丁数据表;所述补丁数据索引表用于存储补丁数据中各个数据段中数据的地址;所述补丁数据表用于存储各个数据段中的数据;
加载所述补丁执行文件至所述电子设备的操作系统;
响应于针对所述第二WebAssembly二进制文件的函数调用请求,从所述补丁执行文件中确定是否包含与被调用函数对应的数据,如果补丁执行文件包含与被调用函数对应的数据,从所述补丁数据表中获取与被调用的函数对应的数据,完成针对所述函数的函数调用;
反之,从所述第二WebAssembly二进制文件中获取与所述函数对应的数据,完成针对所述函数的函数调用。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
获取目标应用程序的源代码以及包含补丁内容的补丁代码;
将所述目标应用程序的源代码以及补丁代码共同编译生成第一WebAssembly二进制文件;
基于所述补丁内容,确定所述补丁执行文件包含的至少一个数据段,并从所述第一WebAssembly二进制文件中获取与所述至少一个数据段对应的与待补丁函数相关的数据;
重新链接所述至少一个数据段,生成补丁执行文件。
3.根据权利要求2所述的方法,其特征在于,
所述重新链接所述至少一个数据段,生成补丁执行文件,包括:
将与所述至少一个数据段对应的与待补丁函数相关的数据存储至补丁数据表,并将所述各个数据段对应的与待补丁函数相关的数据的地址存储至补丁数据索引表;
链接所述补丁数据索引表和所述补丁数据表,生成补丁执行文件。
4.根据权利要求1所述方法,其特征在于,
从所述补丁执行文件中确定是否包含与被调用函数对应的数据,如果补丁执行文件包含与被调用函数对应的数据,从所述补丁数据表中获取与被调用的函数对应的数据,完成针对所述函数的函数调用;
反之,从所述第二WebAssembly二进制文件中获取与所述函数对应的数据,完成针对所述函数的函数调用,包括:
确定被调用的函数的函数索引是否大于第二WebAssembly二进制文件中函数总数以及导入函数的和;
如果是,从所述补丁执行文件中的函数段或导入段获取与所述函数对应的数据,完成针对所述函数的函数调用;
如果否,从所述补丁执行文件中确定是否包含与所述函数对应的数据;
如果是,从所述补丁执行文件中的补丁数据表中获取与所述函数对应的数据,完成针对所述函数的函数调用,反之,从第二WebAssembly二进制文件中的函数段获取与所述函数对应的数据,完成针对所述函数的函数调用。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
确定所述补丁执行文件中是否包含导入段;
如果是,计算第二 WebAssembly二进制文件中函数总数以及导入函数的和,并将被调用的函数的函数索引与函数总数以及导入函数的和相减,进一步确定计算得到的函数索引是否小于所述补丁执行文件中导入函数的个数;
如果是,从所述补丁执行文件中的导入段获取与所述函数对应的数据,完成针对所述函数的函数调用;反之,从所述补丁执行文件中的函数段获取与所述函数对应的数据,完成针对所述函数的函数调用。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括:
响应于以函数指针方式针对所述第二WebAssembly二进制文件的函数调用请求,确定所述被调用的函数的函数索引是否大于第二 WebAssembly二进制文件中的元素段中元素总数;
如果是,从所述补丁执行文件的元素段获取所述函数的函数索引,并基于所述函数索引调用所述函数。
7.根据权利要求3所述的方法,其特征在于,所述方法还包括:
响应于针对所述第二WebAssembly二进制文件的入口函数的函数调用请求,确定所述补丁数据表中是否包括入口函数的函数地址;
如果是,从所述补丁执行文件中获取所述入口函数的函数地址,并基于所述函数地址调用所述函数;反之,从所述第二WebAssembly二进制文件中获取所述入口函数的函数地址。
8.一种基于补丁的函数调用装置,其特征在于,应用于电子设备,所述装置包括:
文件获取单元,用于获取补丁执行文件;所述补丁执行文件为从基于目标应用程序的源代码和包含补丁内容的补丁代码共同编译生成的第一WebAssembly二进制文件中提取与待补丁函数相关的数据,重新链接生成的文件;所述补丁执行文件中所述与待补丁函数相关的数据的存储结构与所述目标应用程序的源代码对应的第二WebAssembly二进制文件的存储结构相同;所述补丁执行文件还包括补丁数据索引表和补丁数据表;所述补丁数据索引表用于存储补丁数据中各个数据段中数据的地址;所述补丁数据表用于存储各个数据段中的数据;
文件加载单元,用于加载所述补丁执行文件至所述电子设备的操作系统;
函数调用单元,响应于针对所述第二WebAssembly二进制文件的函数调用请求,从所述补丁执行文件中确定是否包含与被调用函数对应的数据,如果补丁执行文件包含与被调用函数对应的数据,从所述补丁数据表中获取与被调用的函数对应的数据,完成针对所述函数的函数调用;
反之,从所述第二WebAssembly二进制文件中获取与所述函数对应的数据,完成针对所述函数的函数调用。
9.一种电子设备,其特征在于,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如权利要求1至7中任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,其上存储有计算机指令,该指令被处理器执行时实现如权利要求1至7中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311533347.8A CN117251234B (zh) | 2023-11-16 | 2023-11-16 | 基于补丁的函数调用方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311533347.8A CN117251234B (zh) | 2023-11-16 | 2023-11-16 | 基于补丁的函数调用方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117251234A CN117251234A (zh) | 2023-12-19 |
CN117251234B true CN117251234B (zh) | 2024-03-29 |
Family
ID=89135391
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311533347.8A Active CN117251234B (zh) | 2023-11-16 | 2023-11-16 | 基于补丁的函数调用方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117251234B (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112560114A (zh) * | 2021-02-22 | 2021-03-26 | 支付宝(杭州)信息技术有限公司 | 调用智能合约的方法及装置 |
CN115167862A (zh) * | 2021-03-19 | 2022-10-11 | 华为技术有限公司 | 补丁方法及相关设备 |
CN116680015A (zh) * | 2023-08-03 | 2023-09-01 | 北京中电华大电子设计有限责任公司 | 函数调用方法、装置、电子设备及可读存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11914721B2 (en) * | 2019-06-12 | 2024-02-27 | Nec Corporation | Method and contract rewriting framework system for supporting smart contracts in a blockchain network |
-
2023
- 2023-11-16 CN CN202311533347.8A patent/CN117251234B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112560114A (zh) * | 2021-02-22 | 2021-03-26 | 支付宝(杭州)信息技术有限公司 | 调用智能合约的方法及装置 |
CN115167862A (zh) * | 2021-03-19 | 2022-10-11 | 华为技术有限公司 | 补丁方法及相关设备 |
CN116680015A (zh) * | 2023-08-03 | 2023-09-01 | 北京中电华大电子设计有限责任公司 | 函数调用方法、装置、电子设备及可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN117251234A (zh) | 2023-12-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107025559B (zh) | 一种业务处理方法及装置 | |
US10089119B2 (en) | API namespace virtualization | |
US9563446B2 (en) | Binary file generation | |
JP2019527892A (ja) | 仮想アドレスマッピングを使用したターゲットアプリケーション機能のカーネルベースの検出 | |
US20190087208A1 (en) | Method and apparatus for loading elf file of linux system in windows system | |
CN116680015B (zh) | 函数调用方法、装置、电子设备及可读存储介质 | |
US20150269052A1 (en) | Method and apparatus for supporting performance analysis | |
CN110019111B (zh) | 数据处理方法、装置、存储介质以及处理器 | |
CN116680014B (zh) | 数据处理方法和装置 | |
CN116700629B (zh) | 数据处理方法和装置 | |
CN107544811B (zh) | IOS平台隐藏dylib文件的方法、存储介质、电子设备及系统 | |
CN103677778A (zh) | 一种CAP文件Classref常量的解析方法 | |
US20140196019A1 (en) | Method and Apparatus for Substituting Compiler Built-in Helper Functions with Machine Instructions | |
CN116661910B (zh) | 一种应用调用的方法及装置 | |
CN106681782B (zh) | 一种编译安卓安装包的动态链接库so文件的方法和装置 | |
CN109409037B (zh) | 一种数据混淆规则的生成方法、装置及设备 | |
CN117251234B (zh) | 基于补丁的函数调用方法及装置 | |
CN111625225A (zh) | 一种程序指定数据输出方法和装置 | |
CN114691496A (zh) | 单元测试方法、装置、计算设备及介质 | |
CN115167862A (zh) | 补丁方法及相关设备 | |
CN116700841B (zh) | 一种原生api调用的方法及装置 | |
CN116755845B (zh) | 数据处理方法和装置 | |
CN114064594A (zh) | 数据处理方法和装置 | |
CN113688056A (zh) | 一种断点调试控制方法及相关设备 | |
CN116700840B (zh) | 文件执行方法、装置、电子设备及可读存储介质 |
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 |