本发明涉及计算机,尤其涉及一种webassembly模块调用函数的方法及装置。
背景技术:
1、资源受限设备(resource constrained device)通常是指电量供应有限,计算能力有限,以及存储容量有限的电子设备。例如智能卡(smart card)和安全单元(secureelement),其内部硬件部分通常包含:中央处理单元(central processing unit,简称cpu)、随机存取存储器(random access memory,简称ram)、只读存储器(read-onlymemory,简称rom)、加/解密引擎、输入/输出接口、安全传感器等部分。这些设备上通常运行有片内操作系统(chip operating system,cos),片内操作系统可以通过输入/输出接口和外部接口设备进行通信,接收外部接口设备的命令,在其内部完成命令处理,把命令响应发送给外部接口设备,为接口设备提供私密信息的安全存储、重要程序的安全执行、用户身份鉴别等安全访问、控制功能。
2、早期资源受限设备片内操作系统程序固化在芯片内,发行之后便不可修改,极大的限制了应用范围,随着编程技术出现,该技术也被用在了资源受限设备上,例如,太阳微系统开发的cpu智能卡平台,该平台上包含运行环境、虚拟机和cpu智能卡api(applicationprogramming interface,应用程序接口)等部分,可以运行cpu智能卡应用。在cpu智能卡发行后也可以把cpu智能卡应用加载到另一cpu智能卡上或修改cpu智能卡上已有的应用,多个cpu智能卡应用各自独立地共存。cpu智能卡发行后下载的应用虽然可以引用其他应用的功能,比如调用其他应用的函数,但这种调用都是单向的调用,无法实现相互交叉调用。
技术实现思路
1、本发明提供一种webassembly模块调用函数的方法及装置,解决程序模块无法相互交叉调用的问题。
2、第一方面,本发明提供了一种webassembly模块调用函数的方法,应用于电子设备,所述电子设备安装有多个webassembly模块,所述方法包括:
3、在所述webassembly模块安装到所述电子设备前,每个所述webassembly模块设置有模块id、若干函数索引;其中,所述模块id为所述webassembly模块的唯一标识,所述函数索引为所述webassembly模块内函数的唯一标识;
4、响应于调用指令,根据所述模块id确定目标webassembly模块;
5、用所述函数索引确定所述目标webassembly模块内的目标函数,并导出所述目标函数进行调用;其中,所述目标函数可在另一所述webassembly模块进行调用。
6、可选地,使用转换器对标准webassembly进行改造得到所述webassembly模块,所述每个所述webassembly模块设置有模块id、若干函数索引包括:
7、输入标准webassembly模块给所述转换器,其中所述标准webassembly模块设置有模块名字、函数名字以及函数签名索引;
8、在所述转换器中,将所述标准webassembly模块中的模块名字更换为所述模块id、将所述函数名字以及所述函数签名索引更换为所述函数索引以得到所述webassembly模块;
9、其中,所述模块id以及若干所述函数索引均为数字,且所述函数索引从所述webassembly模块的输出段中提取,通过所述函数索引可找到函数字节码。
10、可选地,所述每个所述webassembly模块设置有模块id、若干函数索引还包括:
11、验证所述模块id与所述webassembly模块的对应关系;
12、若正确,则根据所述模块名字更新所述模块id;和/或,
13、验证所述函数索引与所述webassembly模块中函数的对应关系是否正确;
14、若正确,则根据所述函数名字以及所述函数签名索引更新所述函数索引。
15、可选地,在所述webassembly模块安装到所述电子设备前,所述方法还包括:
16、编译所述标准webassembly模块,并将所述标准webassembly模块发送给所述转换器;
17、所述转换器根据掩膜文件和导出文件对所述标准webassembly模块的所述模块名字、所述函数名字以及所述函数签名索引进行更换;
18、其中,所述掩膜文件包括所述webassembly模块、及其模块地址表、预安装信息,所述模块地址表记录有模块地址、与所述模块id;
19、所述导出文件记录有所述模块名字、所述模块id、所述模块id对应的webassembly模块、所述函数名字、所述函数签名索引、若干所述函数索引以及所述函数索引对应的函数。
20、可选地,所述响应于调用指令,根据所述模块id确定目标webassembly模块包括:
21、所述调用指令被电子设备上的虚拟机执行时,所述虚拟机根据所述调用指令确定所述模块id和所述函数索引;
22、根据所述模块id、所述导出文件确定所述目标webassembly模块。
23、可选地,所述用所述函数索引确定所述目标webassembly模块内的目标函数,并导出所述目标函数进行调用包括:
24、根据所述函数索引确定所述目标webassembly模块内的目标函数;
25、导出所述目标函数,并在另一所述webassembly模块进行调用。
26、可选地,所述用所述函数索引确定所述目标webassembly模块内的目标函数,并导出所述目标函数进行调用还包括:
27、若调用的目标函数为多个,则根据所述模块id的排序导出顺序;
28、根据所述导出顺序导出所述目标函数。
29、可选地,所述方法还包括:
30、在所述电子设备上构建模块地址表;其中,所述模块地址表记录有每个所述webassembly模块的模块地址、与所述模块id,所述模块地址与所述模块id在所述模块地址表中建立关联关系。
31、第二方面,本技术提供一种webassembly模块调用函数的装置,应用于电子设备,所述电子设备安装有多个webassembly模块,所述装置包括:
32、设置单元,用于在所述webassembly模块安装到所述电子设备前,在每个所述webassembly模块设置模块id、若干函数索引;
33、其中,所述模块id为所述webassembly模块的唯一标识,所述函数索引为所述webassembly模块内函数的唯一标识;
34、确定单元,用于响应于调用指令,根据所述模块id确定目标webassembly模块;
35、导出单元,用于用所述函数索引确定所述目标webassembly模块内的目标函数,并导出所述目标函数进行调用;
36、其中,所述目标函数可在另一所述webassembly模块进行调用。
37、第三方面,本发明提供了一种计算机可读存储介质,所述计算机可读存储介质包括执行指令,当电子设备的处理器执行所述执行指令时,所述电子设备执行如第一方面中任一所述的方法。
38、第四方面,本发明提供了一种电子设备,包括处理器;
39、以及存储有执行指令、webassembly模块、模块id表、模块地址表的存储器;
40、用于安装webassembly模块到资源受限设备上的安装器;
41、用于解释执行webassembly字节码的虚拟机;
42、用于转换webassembly模块的转换器;
43、所述虚拟机,用于从所述存储器中读取所述webassembly字节码,并执行所述指令以实现上述第一方面任一所述的webassembly模块调用函数的方法。
44、本发明提供了一种webassembly模块调用函数的方法,应用于电子设备,所述电子设备安装有多个webassembly模块,webassembly模块调用函数的方法可以在所述webassembly模块安装到所述电子设备前,每个所述webassembly模块设置有模块id、若干函数索引;接着,响应于调用指令,根据所述模块id确定目标webassembly模块;然后,用所述函数索引确定所述目标webassembly模块内的目标函数,并导出所述目标函数进行调用。在本技术中,webassembly模块可根据模块id、若干函数索引调用其他webassembly模块函数,且多个webassembly模块之间可相互调用函数。
45、上述的非惯用的优选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。