CN116680015A - 函数调用方法、装置、电子设备及可读存储介质 - Google Patents
函数调用方法、装置、电子设备及可读存储介质 Download PDFInfo
- Publication number
- CN116680015A CN116680015A CN202310972004.5A CN202310972004A CN116680015A CN 116680015 A CN116680015 A CN 116680015A CN 202310972004 A CN202310972004 A CN 202310972004A CN 116680015 A CN116680015 A CN 116680015A
- Authority
- CN
- China
- Prior art keywords
- function
- address
- request
- target application
- byte
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 63
- 230000006870 function Effects 0.000 claims description 559
- 230000015654 memory Effects 0.000 claims description 26
- 230000008569 process Effects 0.000 claims description 23
- 230000004044 response Effects 0.000 claims description 15
- 230000008676 import Effects 0.000 description 5
- 238000010586 diagram Methods 0.000 description 3
- JEIPFZHSYJVQDO-UHFFFAOYSA-N iron(III) oxide Inorganic materials O=[Fe]O[Fe]=O JEIPFZHSYJVQDO-UHFFFAOYSA-N 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 238000005315 distribution function Methods 0.000 description 2
- 230000001960 triggered effect Effects 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
- 238000011990 functional testing Methods 0.000 description 1
- 229910021389 graphene Inorganic materials 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/4482—Procedural
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- 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)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本申请一个或多个实施例提供一种函数调用方法、装置、电子设备及可读存储介质,应用于电子设备,该方法包括:获取与目标应用程序的程序代码对应的WebAssembly字节码;加载与目标应用程序的程序代码对应的WebAssembly字节码,基于所述WebAssembly字节码的自定义段包含的至少一个函数的函数标识,从所述WebAssembly字节码的函数段解析并存储所述至少一个函数的函数地址;响应于针对所述目标应用程序的业务处理请求,获取与所述业务处理请求对应的至少一个函数的函数地址,并基于所述函数地址调用所述函数,以完成所述业务处理。
Description
技术领域
本申请一个或多个实施例涉及计算机技术领域,尤其涉及一种函数调用方法、装置、电子设备及可读存储介质。
背景技术
WebAssembly是一种低级的类汇编语言,具有紧凑的二进制格式,并可以作为各种高级语言(如Rust、C++、C)的公共编译目标。
基于各种高级语言(如Rust、C++、C)编写的应用,可以被编译成为WebAssembly应用模块,这种WebAssembly应用模块的字节码通过在资源受限设备的片内操作系统上的WebAssembly虚拟机进行解释执行。
WebAssembly应用模块以二进制文件的形式存在,其中包含类型段、导入段、函数段、表段、内存段、全局段、导出段、起始段、元素段、代码段、数据段和自定义段。
通常,一个WebAssembly应用模块可以供外部调用的所有函数会在导出段中,但是导出段是外部可见的,所以从安全的角度来看,如果应用模块中的函数都被导出的话,存在一定的安全威胁。
发明内容
本申请一个或多个实施例提供技术方案如下:
本申请提供一种函数调用方法,所述方法应用于电子设备,所述方法包括:
获取与目标应用程序的程序代码对应的WebAssembly字节码;所述WebAssembly字节码的自定义段包含所述目标应用程序的程序代码中至少一个函数的函数标识;
加载与目标应用程序的程序代码对应的WebAssembly字节码,基于所述WebAssembly字节码的自定义段包含的至少一个函数的函数标识,从所述WebAssembly字节码的函数段解析并存储所述至少一个函数的函数地址;
响应于针对所述目标应用程序的业务处理请求,获取与所述业务处理请求对应的至少一个函数的函数地址,并基于所述函数地址调用所述函数,以完成所述业务处理。
可选的,所述方法还包括:
获取目标应用程序的程序代码;
确定所述程序代码中至少一个函数的函数标识,将所述程序代码编译为WebAssembly字节码,并在编译过程中将所述至少一个函数的函数标识添加至WebAssembly字节码的自定义段。
可选的,将所述至少一个函数的函数标识添加至WebAssembly字节码的自定义段,包括:
将所述至少一个函数的函数标识按顺序添加至WebAssembly字节码的自定义段;所述函数标识的顺序与所述WebAssembly字节码的函数段中至少一个函数的函数索引的顺序相同。
可选的,所述基于所述WebAssembly字节码中包含的至少一个函数的函数标识,解析并存储所述至少一个函数的函数地址,包括:
按照所述WebAssembly字节码的自定义段包含的至少一个函数的函数标识,确定与所述函数标识对应的函数索引;
基于所述函数索引,从WebAssembly字节码的函数段确定与所述函数索引对应的函数地址,并存储所述函数地址。
可选的,所述电子设备包括用于存储所述函数地址的函数注册表;
基于所述函数索引,从WebAssembly字节码的函数段确定与所述函数索引对应的函数地址,并存储所述函数地址,包括:
基于所述函数索引,从WebAssembly字节码的函数段确定与所述函数索引对应的函数地址,并将所述函数地址存储至所述函数注册表。
可选的,所述将所述函数地址存储至所述函数注册表,包括:
将所述函数地址按顺序存储至所述函数注册表;所述函数地址的顺序与所述WebAssembly字节码的自定义段中函数标识的顺序相同。
可选的,所述业务处理请求包括应用注册请求、应用选择请求、应用弃选请求、应用指令分发请求、应用多选请求、应用间共享请求、应用去注册请求。
可选的,所述函数包括通过不同参数进行区分不同的业务处理请求的相同函数标识的至少一个函数;或,
所述函数包括与不同业务处理请求对应的不同函数标识的至少一个函数。
可选的,响应于针对所述目标应用程序的业务处理请求,获取与所述业务处理请求对应的至少一个函数的函数地址,并基于所述函数地址调用所述函数,以完成所述业务处理,包括:
当所述函数的函数标识相同时,响应于针对所述目标应用程序的业务处理请求,基于所述业务处理请求的请求参数,确定与所述请求参数对应的函数,并基于所述函数的函数地址调用所述函数;
当所述函数的函数标识不同时,响应于针对所述应用的业务处理请求,确定与所述业务处理请求中包含的函数标识对应的函数,并基于所述函数的函数地址调用所述函数。
可选的,所述方法还包括:
响应于针对所述目标应用程序的应用注册请求,调用与所述目标应用程序对应的系统回调函数,从WebAssembly字节码的函数段解析并存储所述至少一个函数的函数地址。
本申请还提供一种函数调用装置,所述装置应用于电子设备,所述装置包括:
字节码获取单元,用于获取与目标应用程序的程序代码对应的WebAssembly字节码;所述WebAssembl字节码的自定义段包含所述目标应用程序的程序代码中至少一个函数的函数标识;
字节码加载单元,用于加载与目标应用程序的程序代码对应的WebAssembly字节码,基于所述WebAssembly字节码的自定义段包含的至少一个函数的函数标识,从所述WebAssembly字节码的函数段解析并存储所述至少一个函数的函数地址;
业务处理单元,用于响应于针对所述目标应用程序的业务处理请求,获取与所述业务处理请求对应的至少一个函数的函数地址,并基于所述函数地址调用所述函数,以完成所述业务处理。
可选的,所述装置还包括编译单元,用于获取目标应用程序的程序代码;
确定所述程序代码中至少一个函数的函数标识,将所述程序代码编译为WebAssembly字节码,并在编译过程中将所述至少一个函数的函数标识添加至WebAssembly字节码的自定义段。
可选的,所述编译单元进一步用于将所述至少一个函数的函数标识按顺序添加至WebAssembly字节码的自定义段;所述函数标识的顺序与所述WebAssembly字节码的函数段中至少一个函数的函数索引的顺序相同。
可选的,所述字节码加载单元,进一步用于按照所述WebAssembly字节码的自定义段包含的至少一个函数的函数标识,确定与所述函数标识对应的函数索引;
基于所述函数索引,从WebAssembly字节码的函数段确定与所述函数索引对应的函数地址,并存储所述函数地址。
可选的,所述电子设备包括用于存储所述函数地址的函数注册表;
所述字节码加载单元,进一步用于基于所述函数索引,从WebAssembly字节码的函数段确定与所述函数索引对应的函数地址,并将所述函数地址存储至所述函数注册表。可选的,所述字节码加载单元,进一步用于将所述函数地址按顺序存储至所述函数注册表;所述函数地址的顺序与所述WebAssembly字节码的自定义段中函数标识的顺序相同。
可选的,所述业务处理请求包括应用注册请求、应用选择请求、应用弃选请求、应用指令分发请求、应用多选请求、应用间共享请求、应用去注册请求。
可选的,所述函数包括通过不同参数进行区分不同的业务处理请求的相同函数标识的至少一个函数;或,
所述函数包括与不同业务处理请求对应的不同函数标识的至少一个函数。
在本实施例中,所述业务处理单元进一步用于当所述函数的函数标识相同时,响应于针对所述目标应用程序的业务处理请求,基于所述业务处理请求的请求参数,确定与所述请求参数对应的函数,并基于所述函数的函数地址调用所述函数;
当所述函数的函数标识不同时,响应于针对所述应用的业务处理请求,确定与所述业务处理请求中包含的函数标识对应的函数,并基于所述函数的函数地址调用所述函数。
可选的,所述装置还还包括系统回调单元,用于响应于针对所述目标应用程序的应用注册请求,调用与所述目标应用程序对应的系统回调函数,从WebAssembly字节码的函数段解析并存储所述至少一个函数的函数地址。
本申请还提供一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如上述任一项所述方法的步骤。
本申请还提供一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如上述任一项所述方法的步骤。
在上述技术方案中,在加载WebAssembly字节码时,可以通过WebAssembly字节码自定义段的包含的函数标识,从WebAssembly字节码函数段快速的获取函数地址。无需导出函数也可以获取函数地址,并基于所述函数地址调用相应的函数,而且由于自定义段的内容不会被导出,且可以在加载完成后直接丢弃,因此可以提高安全性。
附图说明
下面将对示例性实施例的描述中所需要使用的附图进行说明,其中:
图1是本申请一示例性实施例示出的一种函数调用方法的流程图。
图2是本申请一示例性实施例示出的一种电子设备的结构示意图。
图3是本申请一示例性实施例示出的一种基于WebAssembly应用调用装置的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或者相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请一个或多个实施例相一致的所有实施方式。相反,它们仅是与本申请一个或多个实施例的一些方面相一致的例子。
需要说明的是,在其他实施例中并不一定按照本申请示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本申请所描述的更多或者更少。此外,本申请中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本申请中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
为了便于理解,下面先对WebAssembly二进制文件的数据格式进行描述。
WebAssembly是一种字节码格式,它被设计用来在各种平台上运行,它还可以作为各种高级语言(如Rust、C++、C)的公共编译目标,并表现出比其他通用语言更好的运行时性能,该字节码可以实现编写一次到处运行。
模块是WebAssembly程序编译、传输和加载的单位,编译后的WebAssembly模块以二进制格式呈现,二进制文件以.wasm为后缀。
WebAssembly模块通常可以包含应用程序的函数、表、内存、全局变量、导入、导出信息;另外,还包括内存和表的初始化数据以及应用程序的函数。
WebAssembly二进制文件共有11种段。包括数据段、类型段、导入段和导出段、函数段和代码段、表段和元素段、数据段、全局段、起始段和自定义段。
其中,类型段,可以列出模块用到的所有函数类型。导入段,可以列出模块所有的导入项目,导出段,可以列出模块所有的导出项,多个模块可以通过导入和导出项链接在一起。模块内的函数信息分开存储在函数段和代码段中,函数段,可以列出模块内所有函数对应类型索引;代码段,可以存储模块内函数的局部变量信息和字节码。函数段和代码段存储的项目数量一致,且一一对应。表段,可以列出模块内定义的所有表,元素段,可以列出表初始化数据。内存段,可以列出模块内定义的所有内存,数据段,可以列出内存初始化数据。全局段,可以列出模块内定义的所有全局变量信息。起始段,可以列出模块的起始函数索引。自定义段,可以存放自定义数据,包括函数名、局部变量名等调试信息和第三方扩展信息等等。
一个WebAssembly应用模块可以供外部调用的所有函数会在导出段中,但是因为导出段是外部可见的,所以从安全的角度来看,如果应用函数都被导出的话,会存在一定的安全威胁。
有鉴于此,本申请提出一种在加载WebAssembly应用模块时,解析并存储函数地址至电子设备,并进一步基于函数地址进行函数调用的方法。
请参考图1,图1是本申请一示例性实施例示出的一种函数调用方法。
在本实施例中,上述函数调用方法可以应用于任一电子设备,所述电子设备可以为资源受限设备。资源受限设备通常是指电量供应有限,计算能力有限以及存储容量有限的电子设备。例如智能卡和安全单元(SE)、物联网设备等。所述方法包括以下步骤:
步骤102:获取与目标应用程序的程序代码对应的WebAssembly字节码;所述WebAssembl字节码的自定义段包含所述目标应用的应用代码中至少一个函数的函数标识。
在本实施例中,目标应用程序可以为需要在所述资源受限的电子设备进行运行的程序。由于电子设备为资源受限设备,因此可能无法直接运行目标应用程序,由此可以将该目标应用程序编译为WebAssembly字节码,以在该资源受限设备搭载的操作系统中的虚拟机上进行运行。
其中,所述电子设备可以预先基于目标应用程序的程序代码,将所述目标应用程序编译为WebAssembly字节码;也可以在需要在所述电子设备上安装所述目标应用程序时,将所述目标应用程序编译为WebAssembly字节码,在本说明书中不做具体限定。
所述电子设备可以从存储空间获取预先编译的与目标应用程序的程序代码对应的WebAssembly字节码,也可以在应用程序安装时直接针对目标应用程序的程序代码进行编译,并获取与目标应用程序的程序代码对应的WebAssembly字节码。
所述WebAssembly字节码中的自定义段中可以包含目标应用程序的程序代码中包含的至少一个函数的函数标识。其中,所述函数标识具体可以为函数的函数名。
在一种实施方式中,所述电子设备将所述目标应用程序编译为WebAssembly字节码时,在编译过程中可以将所述目标应用程序的程序代码中包含的至少一个函数的函数标识添加至所述WebAssembly字节码的自定义段中,以用于后续解析并存储至少一个函数的函数地址。
所述电子设备可以获取目标应用程序的程序代码。其中,所述获取目标应用程序的程序代码的具体方式在本说明书中不做具体限定。例如,可以从所述电子设备的存储空间中导出目标应用程序的程序代码,也可以由用户手动导入目标应用程序的程序代码等等。
获取所述目标应用程序的程序代码之后,所述电子设备可以通过遍历所述目标应用程序的程序代码,确定所述程序代码中至少一个函数的函数标识,将所述程序代码编译为WebAssembly字节码,并在编译过程中将所述至少一个函数的函数标识添加至WebAssembly字节码的自定义段。
其中,所述电子设备可以具有用于将程序代码编译为WebAssembly字节码的编译模块,由编译模块在将程序代码编译为WebAssembly字节码的编译过程中,将所述至少一个函数的函数标识添加至WebAssembly字节码的自定义段。
步骤104:加载与目标应用程序的程序代码对应的WebAssembly字节码,基于所述WebAssembly字节码的自定义段包含的至少一个函数的函数标识,从所述WebAssembly字节码的函数段解析并存储所述至少一个函数的函数地址。
在获取与目标应用程序的程序代码对应的WebAssembly字节码后,所述电子设备可以获取WebAssembly字节码的自定义段包含的至少一个函数的函数标识,并基于函数标识从述WebAssembly字节码的函数段解析出至少一个函数的函数地址。
其中,所述WebAssembly字节码的函数段按顺序存储了至少一个函数的函数索引,所述电子设备可以按照自定义段中函数标识,确定与所述函数标识对应的函数索引,并进一步基于函数索引确定函数地址,并存储在所述电子设备中,以用于后续的函数调用。
在一种实施方式中,所述电子设备在将所述目标应用程序编译为WebAssembly字节码时,在编译过程中可以按顺序将所述目标应用程序的程序代码中包含的至少一个函数的函数标识添加至所述WebAssembly字节码的自定义段中,其中,所述函数标识的顺序与所述WebAssembly字节码的函数段中至少一个函数的函数索引的顺序相同。需要说明的是,在实际应用中,所述WebAssembly字节码的自定义段中的函数标识的顺序是连续进行存储的,而在WebAssembly字节码的函数段中,函数索引的顺序并不一定是连续进行存储的。例如,所述WebAssembly字节码的自定义段中按顺序存储了三个函数的函数标识,分别是“Function1”、“Function2”、“Function3”。而在所述WebAssembly字节码的函数段存储了“Function1”、“Function4”、“Function2”、“Function3”对应的函数索引。
在“Function1”、“Function2”、“Function3”之间,可能还包括其他函数的函数索引,因此虽然顺序相同,但函数索引可能并不是连续的。
由此,在解析所述函数的函数地址时,所述电子设备可以按照所述WebAssembly字节码的自定义段包含的至少一个函数的函数标识,确定与所述函数标识顺序对应的函数索引。
进一步可以基于所述函数索引,从WebAssembly字节码的函数段确定与所述函数索引对应的函数地址。
例如,所述WebAssembly字节码的自定义段中按顺序存储了三个函数的函数标识,分别是“Function1”、“Function2”、“Function3”,对应的,所述WebAssembly字节码的函数段按顺序存储了“Function1”、“Function2”、“Function3”对应的函数索引。通过确定在自定义段中的函数标识“Function1”,可以找到函数段与“Function1”对应的函数索引,由此可以进一步确定与函数索引对应的函数地址。
在获取函数地址后,所述电子设备可以进一步存储所述函数地址,以用于后续进行函数调用。
在一种实施方式中,所述电子设备的存储空间包括用于存储函数地址的函数注册表。其中,所述函数注册表可以以字典的形式,存储函数标识与函数地址之间的对应关系。
所述电子设备可以基于WebAssembly字节码的自定义段中与所述函数标识对应的函数索引,从WebAssembly字节码的函数段确定与所述函数索引对应的函数地址,并将所述函数地址存储至所述函数注册表。
其中,所述电子设备可以进一步生成函数标识与函数地址之间的对应关系,并将所述对应关系存储至所述函数注册表。
在一种实施方式中,所述电子设备还可以将所述函数地址按顺序存储至所述函数注册表;所述函数地址的顺序与所述WebAssembly字节码的自定义段中函数标识的顺序相同。
由于所述函数注册表中的函数地址与WebAssembly字节码的自定义段中函数标识的顺序相同,因此所述函数注册表可以不再存储所述函数标识,只按顺序存储函数地址即可,在调用函数时,只需要通过自定义段中的函数标识顺序,在所述函数注册表中快速的确定函数段中的函数索引,并进一步确定函数地址,再通过所述函数地址完成函数调用。
由于所述函数注册表无需存储函数标识,只需按顺序所述函数地址即可,因此所述函数注册表还可以为数组或链表,可以节省存储空间,还可以加快函数地址的查找速度。
步骤106:响应于针对所述目标应用程序的业务处理请求,获取与所述业务处理请求对应的至少一个函数的函数地址,并基于所述函数地址调用所述函数,以完成所述业务处理。
所述电子设备存储与目标应用程序的程序代码中至少一个函数的函数地址之后,当所述目标应用程序需要进行业务处理时,可以向所述电子设备发送业务处理请求,当接收到所述业务处理请求时,所述电子设备可以确定与业务处理请求对应的至少一个函数的函数地址,并基于所述函数地址调用所述函数。
其中,所述业务处理请求具体可以包括应用注册请求、应用选择请求、应用弃选请求、应用指令分发请求、应用多选请求、应用间共享请求、应用去注册请求等等。
例如,当目标应用程序安装在所述电子设备中之后,可以由用户触发应用注册请求,也可以由电子设备中的操作系统自动触发应用注册请求,所述电子设备可以响应于针对所述目标应用程序的应用注册请求,查找与所述应用注册请求对应的函数的函数地址,并基于所述函数地址调用与所述应用注册请求对应的函数。
又例如,当所述电子设备收到针对目标应用程序的业务分发指令时,所述电子设备可以获取与目标应用程序对应的应用指令分发功能对应的函数的函数地址,并自动调用与目标应用程序对应的应用指令分发功能对应的函数,以由所述函数根据不同的因公指令分别进行处理。
又例如,当目标应用程序支持用户多选时,如果所述目标应用程序在多个逻辑通道上被选择,所述电子设备可以获取与应用多选功能对应的函数的函数地址,并自动调用与目标应用程序对应的应用多选功能对应的函数,以由所述函数处理用户的多选请求。
又例如,当目标应用程序在所述电子设备上被删除时,所述电子设备可以获取与应用去注册功能的对应的函数的函数地址,并自动调用与目标应用程序对应的应用去注册功能对应的函数,以由所述函数卸载所述目标应用程序。
在一种实施方式中,所述电子设备在安装所述目标应用程序后并注册所述目标应用程序时,所述电子设备可以自动调用与所述目标应用程序对应的系统回调函数,并通过所述系统回调函数,从WebAssembly字节码的函数段解析并存储所述至少一个函数的函数地址。
其中,解析并存储所述至少一个函数的函数地址的具体方式与上文相同,在此不再赘述。
通过调用系统回调函数的方式将至少一个函数的函数地址存储至所述电子设备中,由于函数对外是不可见的,因此可以进一步保证函数的安全性。
在一种实施方式中,所述目标应用程序的程序代码中至少一个函数,可以包括通过不同参数进行区分不同的业务处理请求的相同函数标识的至少一个函数。
所述函数包括与不同业务处理请求对应的不同函数标识的至少一个函数。也即不同业务处理请求对应于不同函数标识的函数。
当所述函数的函数标识相同时,所述电子设备可以响应于针对所述目标应用的业务处理请求,基于所述业务处理请求的请求参数,确定与所述请求参数对应的函数,并基于所述函数的函数地址调用所述函数。
例如,所述目标应用程序的程序代码包括三个函数,FunctionTest(int a)、FunctionTest(int a,int b)、FunctionTest(int a,string c)。
如上述例子所述,三个函数的函数标识均为“FunctionTest”,但每个函数的参数均不同,函数1的参数为int a,函数2的参数为 int a,int b,函数3的参数为int a,stringc。在调用所述函数时,其请求参数也不同,因此可以通过请求参数来区分相同函数标识的函数。
例如,当请求参数为1,“abc”,可以确定请求参数为int类型和string类型,因此可以确定与业务请求对应的函数为函数3,并基于函数3的函数地址调用所述函数。
当所述函数的函数标识不同的,所述电子设备可以响应于针对所述应用的业务处理请求,确定与所述业务处理请求中包含的函数标识对应的函数,并基于所述函数的函数地址调用所述函数。
例如,所述目标应用程序的程序代码包括三个函数,FunctionTest1(int a)、FunctionTest2(int a,int b)、FunctionTest3(int a,string c);相应的,不同的业务处理请求对应于不同的函数标识。
例如,与应用弃选请求对应的函数标识为FunctionTest1、与应用指令分发请求对应的函数标识为FunctionTest2、与应用多选请求对应的函数表示为FunctionTest3。
当所述业务处理请求为应用弃选请求时,可以直接确定函数3,并基于函数3的函数地址调用所述函数。
在上述技术方案中,在加载WebAssembly字节码时,可以通过WebAssembly字节码自定义段的包含的函数标识,从WebAssembly字节码函数段快速的获取函数地址。无需导出函数也可以获取函数地址,并基于所述函数地址调用相应的函数,而且由于自定义段的内容不会被导出,且可以在加载完成后直接丢弃,因此可以提高安全性。
与前述函数调用方法的实施例相对应,本申请还提供了基于WebAssembly应用调用装置的实施例。
请参考图2,图2是本申请一示例性实施例示出的一种设备的结构示意图。在硬件层面,该设备包括处理器202、内部总线204、网络接口206、内存208以及非易失性存储器210,当然还可能包括所需要的其他硬件。本申请一个或多个实施例可以基于软件方式来实现,比如由处理器202从非易失性存储器210中读取对应的计算机程序到内存208中然后运行。当然,除了软件实现方式之外,本申请一个或多个实施例并不排除其他实现方式,比如逻辑器件或者软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑模块,也可以是硬件或者逻辑器件。
请参考图3,图3是本申请一示例性实施例示出的一种基于WebAssembly应用调用装置的框图。
上述基于WebAssembly应用调用装置可以应用于图2所示的设备,以实现本申请的技术方案。其中,该基于WebAssembly应用调用装置可以包括:
字节码获取单元,用于获取与目标应用程序的程序代码对应的WebAssembly字节码;所述WebAssembl字节码的自定义段包含所述目标应用程序的程序代码中至少一个函数的函数标识;
字节码加载单元,用于加载与目标应用程序的程序代码对应的WebAssembly字节码,基于所述WebAssembly字节码的自定义段包含的至少一个函数的函数标识,从所述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 (13)
1.一种函数调用方法,所述方法应用于电子设备,所述方法包括:
获取与目标应用程序的程序代码对应的WebAssembly字节码;所述WebAssembl字节码的自定义段包含所述目标应用程序的程序代码中至少一个函数的函数标识;
加载与目标应用程序的程序代码对应的WebAssembly字节码,基于所述WebAssembly字节码的自定义段包含的至少一个函数的函数标识,从所述WebAssembly字节码的函数段解析并存储所述至少一个函数的函数地址;
响应于针对所述目标应用程序的业务处理请求,获取与所述业务处理请求对应的至少一个函数的函数地址,并基于所述函数地址调用所述函数,以完成所述业务处理。
2.根据权利要求1所述的方法,所述方法还包括:
获取目标应用程序的程序代码;
确定所述程序代码中至少一个函数的函数标识,将所述程序代码编译为WebAssembly字节码,并在编译过程中将所述至少一个函数的函数标识添加至WebAssembly字节码的自定义段。
3.根据权利要求2所述的方法,将所述至少一个函数的函数标识添加至WebAssembly字节码的自定义段,包括:
将所述至少一个函数的函数标识按顺序添加至WebAssembly字节码的自定义段;所述函数标识的顺序与所述WebAssembly字节码的函数段中至少一个函数的函数索引的顺序相同。
4.根据权利要求3所述的方法,所述基于所述WebAssembly字节码中包含的至少一个函数的函数标识,解析并存储所述至少一个函数的函数地址,包括:
按照所述WebAssembly字节码的自定义段包含的至少一个函数的函数标识,确定与所述函数标识对应的函数索引;
基于所述函数索引,从WebAssembly字节码的函数段确定与所述函数索引对应的函数地址,并存储所述函数地址。
5.根据权利要求4所述的方法,所述电子设备包括用于存储所述函数地址的函数注册表;
基于所述函数索引,从WebAssembly字节码的函数段确定与所述函数索引对应的函数地址,并存储所述函数地址,包括:
基于所述函数索引,从WebAssembly字节码的函数段确定与所述函数索引对应的函数地址,并将所述函数地址存储至所述函数注册表。
6.根据权利要求5所述的方法,所述将所述函数地址存储至所述函数注册表,包括:
将所述函数地址按顺序存储至所述函数注册表;所述函数地址的顺序与所述WebAssembly字节码的自定义段中函数标识的顺序相同。
7.根据权利要求1所述的方法,所述业务处理请求包括应用注册请求、应用选择请求、应用弃选请求、应用指令分发请求、应用多选请求、应用间共享请求、应用去注册请求。
8.根据权利要求1所述的方法,所述函数包括通过不同参数进行区分不同的业务处理请求的相同函数标识的至少一个函数;或,
所述函数包括与不同业务处理请求对应的不同函数标识的至少一个函数。
9.根据权利要求8所述的方法,响应于针对所述目标应用程序的业务处理请求,获取与所述业务处理请求对应的至少一个函数的函数地址,并基于所述函数地址调用所述函数,以完成所述业务处理,包括:
当所述函数的函数标识相同时,响应于针对所述目标应用程序的业务处理请求,基于所述业务处理请求的请求参数,确定与所述请求参数对应的函数,并基于所述函数的函数地址调用所述函数;
当所述函数的函数标识不同时,响应于针对所述应用的业务处理请求,确定与所述业务处理请求中包含的函数标识对应的函数,并基于所述函数的函数地址调用所述函数。
10.根据权利要求7所述的方法,所述方法还包括:
响应于针对所述目标应用程序的应用注册请求,调用与所述目标应用程序对应的系统回调函数,从WebAssembly字节码的函数段解析并存储所述至少一个函数的函数地址。
11.一种函数调用装置,所述装置应用于电子设备,所述装置包括:
字节码获取单元,用于获取与目标应用程序的程序代码对应的WebAssembly字节码;所述WebAssembly字节码的自定义段包含所述目标应用程序的程序代码中至少一个函数的函数标识;
字节码加载单元,用于加载与目标应用程序的程序代码对应的WebAssembly字节码,基于所述WebAssembly字节码的自定义段包含的至少一个函数的函数标识,从所述WebAssembly字节码的函数段解析并存储所述至少一个函数的函数地址;
业务处理单元,用于响应于针对所述目标应用程序的业务处理请求,获取与所述业务处理请求对应的至少一个函数的函数地址,并基于所述函数地址调用所述函数,以完成所述业务处理。
12.一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如权利要求1至5中任一项所述的方法。
13.一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如权利要求1至10中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310972004.5A CN116680015B (zh) | 2023-08-03 | 2023-08-03 | 函数调用方法、装置、电子设备及可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310972004.5A CN116680015B (zh) | 2023-08-03 | 2023-08-03 | 函数调用方法、装置、电子设备及可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116680015A true CN116680015A (zh) | 2023-09-01 |
CN116680015B CN116680015B (zh) | 2023-09-26 |
Family
ID=87781381
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310972004.5A Active CN116680015B (zh) | 2023-08-03 | 2023-08-03 | 函数调用方法、装置、电子设备及可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116680015B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117008971A (zh) * | 2023-09-27 | 2023-11-07 | 北京中电华大电子设计有限责任公司 | WebAssembly指令集的转换方法及装置 |
CN117251234A (zh) * | 2023-11-16 | 2023-12-19 | 北京中电华大电子设计有限责任公司 | 基于补丁的函数调用方法及装置 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110675256A (zh) * | 2019-08-30 | 2020-01-10 | 阿里巴巴集团控股有限公司 | 部署和执行智能合约的方法及装置 |
US20200174937A1 (en) * | 2019-08-30 | 2020-06-04 | Alibaba Group Holding Limited | Deploying a smart contract |
CN111324396A (zh) * | 2020-03-19 | 2020-06-23 | 深圳市网心科技有限公司 | 一种区块链智能合约执行方法、装置及设备 |
US20210182040A1 (en) * | 2019-12-13 | 2021-06-17 | Sap Se | Delegating Bytecode Runtime Compilation to Serverless Environment |
CN113946602A (zh) * | 2021-10-27 | 2022-01-18 | 中国建设银行股份有限公司 | 数据查找方法、装置、设备和介质 |
CN115495087A (zh) * | 2022-08-31 | 2022-12-20 | 蚂蚁区块链科技(上海)有限公司 | 一种区块链中实现反射机制的方法、编译方法和编译器、Wasm虚拟机 |
CN115495086A (zh) * | 2022-08-31 | 2022-12-20 | 蚂蚁区块链科技(上海)有限公司 | 一种编译方法和编译器、Wasm虚拟机 |
CN115982784A (zh) * | 2023-03-21 | 2023-04-18 | 紫光同芯微电子有限公司 | 一种WebAssembly模块调用函数的方法及装置 |
-
2023
- 2023-08-03 CN CN202310972004.5A patent/CN116680015B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110675256A (zh) * | 2019-08-30 | 2020-01-10 | 阿里巴巴集团控股有限公司 | 部署和执行智能合约的方法及装置 |
US20200174937A1 (en) * | 2019-08-30 | 2020-06-04 | Alibaba Group Holding Limited | Deploying a smart contract |
US20210182040A1 (en) * | 2019-12-13 | 2021-06-17 | Sap Se | Delegating Bytecode Runtime Compilation to Serverless Environment |
CN111324396A (zh) * | 2020-03-19 | 2020-06-23 | 深圳市网心科技有限公司 | 一种区块链智能合约执行方法、装置及设备 |
CN113946602A (zh) * | 2021-10-27 | 2022-01-18 | 中国建设银行股份有限公司 | 数据查找方法、装置、设备和介质 |
CN115495087A (zh) * | 2022-08-31 | 2022-12-20 | 蚂蚁区块链科技(上海)有限公司 | 一种区块链中实现反射机制的方法、编译方法和编译器、Wasm虚拟机 |
CN115495086A (zh) * | 2022-08-31 | 2022-12-20 | 蚂蚁区块链科技(上海)有限公司 | 一种编译方法和编译器、Wasm虚拟机 |
CN115982784A (zh) * | 2023-03-21 | 2023-04-18 | 紫光同芯微电子有限公司 | 一种WebAssembly模块调用函数的方法及装置 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117008971A (zh) * | 2023-09-27 | 2023-11-07 | 北京中电华大电子设计有限责任公司 | WebAssembly指令集的转换方法及装置 |
CN117008971B (zh) * | 2023-09-27 | 2023-12-29 | 北京中电华大电子设计有限责任公司 | WebAssembly指令集的转换方法及装置 |
CN117251234A (zh) * | 2023-11-16 | 2023-12-19 | 北京中电华大电子设计有限责任公司 | 基于补丁的函数调用方法及装置 |
CN117251234B (zh) * | 2023-11-16 | 2024-03-29 | 北京中电华大电子设计有限责任公司 | 基于补丁的函数调用方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN116680015B (zh) | 2023-09-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN116680015B (zh) | 函数调用方法、装置、电子设备及可读存储介质 | |
US20190087208A1 (en) | Method and apparatus for loading elf file of linux system in windows system | |
CN116680014B (zh) | 数据处理方法和装置 | |
CN115982784A (zh) | 一种WebAssembly模块调用函数的方法及装置 | |
CN116700629B (zh) | 数据处理方法和装置 | |
CN109190367B (zh) | 利用沙箱运行应用程序安装包的方法及装置 | |
CN117032719A (zh) | 针对TypeScript的静态编译方法及装置 | |
CN109409037B (zh) | 一种数据混淆规则的生成方法、装置及设备 | |
CN110968500A (zh) | 一种测试用例的执行方法及装置 | |
CN114691496A (zh) | 单元测试方法、装置、计算设备及介质 | |
CN113849811A (zh) | 一种共享虚拟资源分析方法及装置 | |
CN117251234B (zh) | 基于补丁的函数调用方法及装置 | |
CN116755845B (zh) | 数据处理方法和装置 | |
CN116700840B (zh) | 文件执行方法、装置、电子设备及可读存储介质 | |
CN111143790B (zh) | 代码混淆方法、装置、设备及存储介质 | |
CN116700841B (zh) | 一种原生api调用的方法及装置 | |
CN116955209B (zh) | WebAssembly虚拟机的测试方法和装置 | |
CN117785728A (zh) | 数据处理方法和装置 | |
CN106897588B (zh) | 一种标签函数的处理方法及装置 | |
CN112749189A (zh) | 数据查询方法及装置 | |
CN117033064A (zh) | 一种代码异常处理的方法及装置 | |
CN115629764A (zh) | 一种Java程序静态编译方法及装置 | |
CN111045657B (zh) | 程序代码的运行方法和运行装置以及编译方法和编译装置 | |
CN116932149A (zh) | 数据处理方法和装置 | |
CN106502755B (zh) | 一种检查Linux内核模块未知符号的方法及装置 |
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 |