本技术一个或多个实施例涉及计算机,尤其涉及一种函数调用方法、装置、电子设备及可读存储介质。
背景技术:
1、webassembly是一种低级的类汇编语言,具有紧凑的二进制格式,并可以作为各种高级语言(如rust、c++、c)的公共编译目标。
2、基于各种高级语言(如rust、c++、c)编写的应用,可以被编译成为webassembly应用模块,这种webassembly应用模块的字节码通过在资源受限设备的片内操作系统上的webassembly虚拟机进行解释执行。
3、webassembly应用模块以二进制文件的形式存在,其中包含类型段、导入段、函数段、表段、内存段、全局段、导出段、起始段、元素段、代码段、数据段和自定义段。
4、通常,一个webassembly应用模块可以供外部调用的所有函数会在导出段中,但是导出段是外部可见的,所以从安全的角度来看,如果应用模块中的函数都被导出的话,存在一定的安全威胁。
技术实现思路
1、本技术一个或多个实施例提供技术方案如下:
2、本技术提供一种函数调用方法,所述方法应用于电子设备,所述方法包括:
3、获取与目标应用程序的程序代码对应的webassembly字节码;所述webassembly字节码的自定义段包含所述目标应用程序的程序代码中至少一个函数的函数标识;
4、加载与目标应用程序的程序代码对应的webassembly字节码,基于所述webassembly字节码的自定义段包含的至少一个函数的函数标识,从所述webassembly字节码的函数段解析并存储所述至少一个函数的函数地址;
5、响应于针对所述目标应用程序的业务处理请求,获取与所述业务处理请求对应的至少一个函数的函数地址,并基于所述函数地址调用所述函数,以完成所述业务处理。
6、可选的,所述方法还包括:
7、获取目标应用程序的程序代码;
8、确定所述程序代码中至少一个函数的函数标识,将所述程序代码编译为webassembly字节码,并在编译过程中将所述至少一个函数的函数标识添加至webassembly字节码的自定义段。
9、可选的,将所述至少一个函数的函数标识添加至webassembly字节码的自定义段,包括:
10、将所述至少一个函数的函数标识按顺序添加至webassembly字节码的自定义段;所述函数标识的顺序与所述webassembly字节码的函数段中至少一个函数的函数索引的顺序相同。
11、可选的,所述基于所述webassembly字节码中包含的至少一个函数的函数标识,解析并存储所述至少一个函数的函数地址,包括:
12、按照所述webassembly字节码的自定义段包含的至少一个函数的函数标识,确定与所述函数标识对应的函数索引;
13、基于所述函数索引,从webassembly字节码的函数段确定与所述函数索引对应的函数地址,并存储所述函数地址。
14、可选的,所述电子设备包括用于存储所述函数地址的函数注册表;
15、基于所述函数索引,从webassembly字节码的函数段确定与所述函数索引对应的函数地址,并存储所述函数地址,包括:
16、基于所述函数索引,从webassembly字节码的函数段确定与所述函数索引对应的函数地址,并将所述函数地址存储至所述函数注册表。
17、可选的,所述将所述函数地址存储至所述函数注册表,包括:
18、将所述函数地址按顺序存储至所述函数注册表;所述函数地址的顺序与所述webassembly字节码的自定义段中函数标识的顺序相同。
19、可选的,所述业务处理请求包括应用注册请求、应用选择请求、应用弃选请求、应用指令分发请求、应用多选请求、应用间共享请求、应用去注册请求。
20、可选的,所述函数包括通过不同参数进行区分不同的业务处理请求的相同函数标识的至少一个函数;或,
21、所述函数包括与不同业务处理请求对应的不同函数标识的至少一个函数。
22、可选的,响应于针对所述目标应用程序的业务处理请求,获取与所述业务处理请求对应的至少一个函数的函数地址,并基于所述函数地址调用所述函数,以完成所述业务处理,包括:
23、当所述函数的函数标识相同时,响应于针对所述目标应用程序的业务处理请求,基于所述业务处理请求的请求参数,确定与所述请求参数对应的函数,并基于所述函数的函数地址调用所述函数;
24、当所述函数的函数标识不同时,响应于针对所述应用的业务处理请求,确定与所述业务处理请求中包含的函数标识对应的函数,并基于所述函数的函数地址调用所述函数。
25、可选的,所述方法还包括:
26、响应于针对所述目标应用程序的应用注册请求,调用与所述目标应用程序对应的系统回调函数,从webassembly字节码的函数段解析并存储所述至少一个函数的函数地址。
27、本技术还提供一种函数调用装置,所述装置应用于电子设备,所述装置包括:
28、字节码获取单元,用于获取与目标应用程序的程序代码对应的webassembly字节码;所述webassembl字节码的自定义段包含所述目标应用程序的程序代码中至少一个函数的函数标识;
29、字节码加载单元,用于加载与目标应用程序的程序代码对应的webassembly字节码,基于所述webassembly字节码的自定义段包含的至少一个函数的函数标识,从所述webassembly字节码的函数段解析并存储所述至少一个函数的函数地址;
30、业务处理单元,用于响应于针对所述目标应用程序的业务处理请求,获取与所述业务处理请求对应的至少一个函数的函数地址,并基于所述函数地址调用所述函数,以完成所述业务处理。
31、可选的,所述装置还包括编译单元,用于获取目标应用程序的程序代码;
32、确定所述程序代码中至少一个函数的函数标识,将所述程序代码编译为webassembly字节码,并在编译过程中将所述至少一个函数的函数标识添加至webassembly字节码的自定义段。
33、可选的,所述编译单元进一步用于将所述至少一个函数的函数标识按顺序添加至webassembly字节码的自定义段;所述函数标识的顺序与所述webassembly字节码的函数段中至少一个函数的函数索引的顺序相同。
34、可选的,所述字节码加载单元,进一步用于按照所述webassembly字节码的自定义段包含的至少一个函数的函数标识,确定与所述函数标识对应的函数索引;
35、基于所述函数索引,从webassembly字节码的函数段确定与所述函数索引对应的函数地址,并存储所述函数地址。
36、可选的,所述电子设备包括用于存储所述函数地址的函数注册表;
37、所述字节码加载单元,进一步用于基于所述函数索引,从webassembly字节码的函数段确定与所述函数索引对应的函数地址,并将所述函数地址存储至所述函数注册表。可选的,所述字节码加载单元,进一步用于将所述函数地址按顺序存储至所述函数注册表;所述函数地址的顺序与所述webassembly字节码的自定义段中函数标识的顺序相同。
38、可选的,所述业务处理请求包括应用注册请求、应用选择请求、应用弃选请求、应用指令分发请求、应用多选请求、应用间共享请求、应用去注册请求。
39、可选的,所述函数包括通过不同参数进行区分不同的业务处理请求的相同函数标识的至少一个函数;或,
40、所述函数包括与不同业务处理请求对应的不同函数标识的至少一个函数。
41、在本实施例中,所述业务处理单元进一步用于当所述函数的函数标识相同时,响应于针对所述目标应用程序的业务处理请求,基于所述业务处理请求的请求参数,确定与所述请求参数对应的函数,并基于所述函数的函数地址调用所述函数;
42、当所述函数的函数标识不同时,响应于针对所述应用的业务处理请求,确定与所述业务处理请求中包含的函数标识对应的函数,并基于所述函数的函数地址调用所述函数。
43、可选的,所述装置还还包括系统回调单元,用于响应于针对所述目标应用程序的应用注册请求,调用与所述目标应用程序对应的系统回调函数,从webassembly字节码的函数段解析并存储所述至少一个函数的函数地址。
44、本技术还提供一种电子设备,包括:
45、处理器;
46、用于存储处理器可执行指令的存储器;
47、其中,所述处理器通过运行所述可执行指令以实现如上述任一项所述方法的步骤。
48、本技术还提供一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如上述任一项所述方法的步骤。
49、在上述技术方案中,在加载webassembly字节码时,可以通过webassembly字节码自定义段的包含的函数标识,从webassembly字节码函数段快速的获取函数地址。无需导出函数也可以获取函数地址,并基于所述函数地址调用相应的函数,而且由于自定义段的内容不会被导出,且可以在加载完成后直接丢弃,因此可以提高安全性。