System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本说明书实施例涉及计算机领域,尤其涉及一种webassembly应用的掩模制作方法及装置。
技术介绍
1、webassembly(也可以简称为wasm)是一种运行在网络浏览器中的新型代码,其可以为诸如c、c++和rust等编程语言提供一个高效的编译目标。webassembly具有快速、高效、可移植的特点,可以在不同平台上以接近本地速度运行。
2、目前webassembly技术已经可以在资源受限设备中使用。开发者开发的应用,可以下载到webassembly虚拟机中,然后安装使用,在不需要的时候可以删除安装包。
3、然而,在一些特殊场景下,资源受限设备无法通过下载安装包的方式来安装webassembly应用。
技术实现思路
1、本说明书实施例提供的一种webassembly应用的掩模制作方法及装置。用以解决资源受限设备无法通过下载安装包的方式来安装webassembly应用的问题。
2、根据本说明书实施例的第一方面,提供一种webassembly应用的掩模制作方法,应用于资源受限设备,所述方法包括:
3、获取预先设置的只读存储器区的掩模代码起始地址、所述只读存储器区的注册表起始地址和非易失性内存区的模块静态类型数据起始地址;
4、对用于制作所述webassembly应用的掩模的webassembly模块执行以下处理:
5、读取当前webassembly模块的二进制可执行文件,解析所述二进制可执行文件中记录的各段数据
6、根据所述掩模内存对象中存储的各段数据生成与所述当前webassembly模块对应的掩模代码、模块注册表和模块静态类型数据,并从所述只读存储器区的掩模代码起始地址开始存储所述掩模代码、从所述只读存储器区的注册表起始地址开始存储所述模块注册表、从所述非易失性内存区的模块静态类型数据起始地址开始存储所述模块静态类型数据;
7、确定所述当前webassembly模块是否为最后的webassembly模块,如果否,则将下一webassembly模块作为当前webassembly模块重复上述处理;
8、如果是,将经过处理的所有webassembly模块对应的掩模代码、模块注册表和模块静态类型数据合并后输出到掩模数据文件;所述掩模数据文件为制作完成的所述webassembly应用的掩模。
9、可选的,所述掩模代码包括导入段数据、函数段数据、元素段数据、应用段数据、导出段数据、数据段数据、代码段数据和自定义段数据;
10、所述掩模代码存储于所述只读存储器区,所述掩模代码为只读数据;
11、其中,所述导入段数据、函数段数据、元素段数据、应用段数据、导出段数据、数据段数据、代码段数据在所述掩模代码内的结构不同于在所述二进制可执行文件中的结构。
12、可选的,所述掩模内存对象包括存储所述掩模代码及对应的掩模代码起始地址的内存对象、所述模块注册表及对应的模块注册表起始地址的内存对象、所述模块静态类型数据及对应的模块静态类型数据起始地址的内存对象。
13、可选的,在确定所述当前webassembly模块不为最后的webassembly模块之后,以及在将下一webassembly模块作为当前webassembly模块重复上述处理之前,还包括:
14、将所述只读存储器区存储的所述掩模代码的结束地址作为下一webassembly模块的掩模代码起始地址,将所述只读存储器区存储的所述模块注册表的结束地址作为下一webassembly模块的注册表起始地址,将所述非易失性内存区存储的所述模块静态类型数据的结束地址作为下一webassembly模块的模块静态类型数据起始地址;
15、将当前webassembly模块的掩模代码起始地址、模块注册表起始地址、模块静态类型数据起始地址存入所述掩模内存对象中。
16、可选的,所述模块注册表包括当前webassembly模块的模块版本、当前webassembly模块的应用唯一标识、当前webassembly模块依赖的其它webassembly模块的模块信息、各段数据的起始地址、可读写数据起始地址偏移、引用类型数据起始地址偏移、当前webassembly模块的数据总大小;
17、所述模块注册表存储于所述只读存储器区,所述模块注册表为只读数据。
18、可选的,针对所述模块注册表,所述解析所述二进制可执行文件中记录的各段数据,将所述各段数据存储到掩模内存对象,包括:
19、解析所述二进制可执行文件中记录的首段数据,得到当前webassembly模块的模块版本、当前webassembly模块的应用唯一标识、导出段配置、导入函数个数、函数段大小、元素段大小;
20、通过所述导入函数个数、函数段大小、元素段大小计算掩模代码中导入段大小、函数段大小、元素段大小;并通过当前webassembly模块的掩模代码起始地址计算所述导入段、函数段、元素段的起始地址和结束地址,进而将计算得到的所述掩模代码中的函数段大小、函数段的起始地址、函数段的结束地址作为掩模代码的函数段数据存入掩模内存对象中;
21、将所述模块版本、应用唯一标识、导出段配置,以及所述导入段、函数段、元素段的起始地址和结束地址存入掩模内存对象中的模块注册表。
22、可选的,针对所述掩模代码中的导入段数据,所述解析所述二进制可执行文件中记录的各段数据,将所述各段数据存储到掩模内存对象,包括:
23、解析所述二进制可执行文件中记录的导入段,得到导入函数索引和对应的导入模块的应用唯一标识;
24、对比所述导入模块的应用唯一标识和系统模块的应用唯一标识,确定所述导入模块是否为系统模块;
25、如果所述导入模块是系统模块,则通过系统api注册表查找所述导入模块的模块标识和导入函数地址;
26、如果所述导入模块不是系统模块,则遍历所有缓存的掩模内存对象中的模块注册表,以将所述导入模块的应用唯一标识与所述模块注册表中的应用唯一标识进行匹配,从匹配成功的模块注册表中获取所述导入模块的模块标识,以及从匹配成功的掩模内存对象中得到函数段,并从所述函数段中查找与所述导入函数索引对应的导入函数地址;
27、将导入模块是否为系统模块的标记、导入模块的模块标识、导入函数地址作为掩模代码的导入段数据存入掩模内存对象中。
28、可选的,所述系统api注册表通过以下方式得到:
29、通过操作系统的内存地址分布导出map文件,得到系统api在系统内存中的地址;
30、根据系统api在系统内存中的地址,从系统二进制执行文件中获取系统api的函数索引、函数类型索引;
31、将系统api的函数索引、函数类型索引、内存地址组织成数据结构,得到系统api注册表。
32、可选的,本文档来自技高网...
【技术保护点】
1.一种WebAssembly应用的掩模制作方法,其特征在于,应用于资源受限设备,所述方法包括:
2.根据权利要求1所述的方法,其特征在于,所述掩模代码包括导入段数据、函数段数据、元素段数据、应用段数据、导出段数据、数据段数据、代码段数据和自定义段数据;
3.根据权利要求2所述的方法,其特征在于,所述掩模内存对象包括存储所述掩模代码及对应的掩模代码起始地址的内存对象、所述模块注册表及对应的模块注册表起始地址的内存对象、所述模块静态类型数据及对应的模块静态类型数据起始地址的内存对象。
4.根据权利要求3所述的方法,其特征在于,在确定所述当前WebAssembly模块不为最后的WebAssembly模块之后,以及在将下一WebAssembly模块作为当前WebAssembly模块重复上述处理之前,还包括:
5.根据权利要求3所述的方法,其特征在于,所述模块注册表包括当前WebAssembly模块的模块版本、当前WebAssembly模块的应用唯一标识、当前WebAssembly模块依赖的其它WebAssembly模块的模块信息、各段数据
6.根据权利要求5所述的方法,其特征在于,针对所述模块注册表,所述解析所述二进制可执行文件中记录的各段数据,将所述各段数据存储到掩模内存对象,包括:
7.根据权利要求6所述的方法,其特征在于,针对所述掩模代码中的导入段数据,所述解析所述二进制可执行文件中记录的各段数据,将所述各段数据存储到掩模内存对象,包括:
8.根据权利要求7所述的方法,其特征在于,所述系统API注册表通过以下方式得到:
9.根据权利要求8所述的方法,其特征在于,针对所述掩模代码中的函数段数据,所述解析所述二进制可执行文件中记录的各段数据,将所述各段数据存储到掩模内存对象,包括:
10.根据权利要求9所述的方法,其特征在于,针对所述掩模代码中的应用段数据,所述解析所述二进制可执行文件中记录的各段数据,将所述各段数据存储到掩模内存对象,包括:
11.根据权利要求10所述的方法,其特征在于,针对所述模块注册表,所述解析所述二进制可执行文件中记录的各段数据,将所述各段数据存储到掩模内存对象,还包括:
12.根据权利要求11所述的方法,其特征在于,针对所述掩模代码中的导出段数据,所述解析所述二进制可执行文件中记录的各段数据,将所述各段数据存储到掩模内存对象,包括:
13.根据权利要求12所述的方法,其特征在于,针对所述掩模代码中的元素段数据,所述解析所述二进制可执行文件中记录的各段数据,将所述各段数据存储到掩模内存对象,包括:
14.根据权利要求13所述的方法,其特征在于,针对所述掩模代码中的数据段数据,所述解析所述二进制可执行文件中记录的各段数据,将所述各段数据存储到掩模内存对象,包括:
15.根据权利要求14所述的方法,其特征在于,针对所述掩模代码中的代码段数据,所述解析所述二进制可执行文件中记录的各段数据,将所述各段数据存储到掩模内存对象,包括:
16.根据权利要求15所述的方法,其特征在于,如果所述二进制可执行文件中包含自定义段,则所述解析所述二进制可执行文件中记录的各段数据,将所述各段数据存储到掩模内存对象,包括:
17.根据权利要求16所述的方法,其特征在于,还包括:
18.根据权利要求17所述的方法,其特征在于,所述根据所述掩模内存对象中存储的各段数据生成与所述当前WebAssembly模块对应的掩模数据,包括:
19.根据权利要求18所述的方法,其特征在于,所述将经过处理的所有WebAssembly模块对应的掩模数据合并后输出到掩模数据文件,包括:
20.一种WebAssembly应用的掩模制作装置,其特征在于,应用于资源受限设备,所述装置包括:
21.一种电子设备,其特征在于,包括:
...【技术特征摘要】
1.一种webassembly应用的掩模制作方法,其特征在于,应用于资源受限设备,所述方法包括:
2.根据权利要求1所述的方法,其特征在于,所述掩模代码包括导入段数据、函数段数据、元素段数据、应用段数据、导出段数据、数据段数据、代码段数据和自定义段数据;
3.根据权利要求2所述的方法,其特征在于,所述掩模内存对象包括存储所述掩模代码及对应的掩模代码起始地址的内存对象、所述模块注册表及对应的模块注册表起始地址的内存对象、所述模块静态类型数据及对应的模块静态类型数据起始地址的内存对象。
4.根据权利要求3所述的方法,其特征在于,在确定所述当前webassembly模块不为最后的webassembly模块之后,以及在将下一webassembly模块作为当前webassembly模块重复上述处理之前,还包括:
5.根据权利要求3所述的方法,其特征在于,所述模块注册表包括当前webassembly模块的模块版本、当前webassembly模块的应用唯一标识、当前webassembly模块依赖的其它webassembly模块的模块信息、各段数据的起始地址、可读写数据起始地址偏移、引用类型数据起始地址偏移、当前webassembly模块的数据总大小;
6.根据权利要求5所述的方法,其特征在于,针对所述模块注册表,所述解析所述二进制可执行文件中记录的各段数据,将所述各段数据存储到掩模内存对象,包括:
7.根据权利要求6所述的方法,其特征在于,针对所述掩模代码中的导入段数据,所述解析所述二进制可执行文件中记录的各段数据,将所述各段数据存储到掩模内存对象,包括:
8.根据权利要求7所述的方法,其特征在于,所述系统api注册表通过以下方式得到:
9.根据权利要求8所述的方法,其特征在于,针对所述掩模代码中的函数段数据,所述解析所述二进制可执行文件中记录的各段数据,将所述各段数据存储到掩模内存对象,包括:
10.根据权利要求9所述的方法...
【专利技术属性】
技术研发人员:赵辉,高景阳,
申请(专利权)人:北京中电华大电子设计有限责任公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。