一种在虚拟机中执行功能模块的方法和装置制造方法及图纸

技术编号:23787167 阅读:42 留言:0更新日期:2020-04-15 00:31
本说明书实施例提供了一种在虚拟机中执行功能模块的方法和装置,所述功能模块在第一模块中定义,所述方法包括:获取所述第一模块的WASM指令序列;基于所述第一模块的WASM指令序列确定全局变量标识范围;基于所述全局变量标识范围,对所述第一模块的WASM指令序列中的每个指令进行全局变量标识检查,以确定是否执行所述功能模块。

A method and device of executing function module in virtual machine

【技术实现步骤摘要】
一种在虚拟机中执行功能模块的方法和装置
本说明书一个或多个实施例涉及区块链
,更具体地,涉及一种在虚拟机中执行功能模块的方法和装置。
技术介绍
虚拟机(VirtualMachine)是通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。由于虚拟机可以隔离底层硬件平台以及操作系统对上层应用的影响,因此非常有利于上层应用的开发。上层应用开发过程中无需关注底层平台的细节,只需要关注具体的业务逻辑。开发完成后,由虚拟机运行上层应用,负责将应用的代码转换为适于底层平台执行的代码。具体地,在许多场景中,上层应用由开发人员使用高级语言编写开发,之后通过编译器编译为字节码(bytecode)。字节码是一种执行程序,由一序列操作码(op码)-数据对组成的二进制文件,是一种中间码。然后,虚拟机中的解释器对字节码代表的指令流进行解释和执行。例如,在支持智能合约的区块链应用场景中,可以在区块链网络的每个节点中部署虚拟机。用户可以用高级语言编写智能合约,然后经由编译器编译为字节码之后,将该字节码包含在创建智能合约的交易中,发布到区块链网络中,也就是部署到区块链网络的各个节点中。在需要执行智能合约时,由各个节点中的虚拟机对该字节码进行解释执行。随着WASM语言的出现,越来越多的区块链中使用WASM作为智能合约的编写语言,相对应地,使用WASM虚拟机来执行智能合约。WASM即WebAssembly,是由W3C社区组织推出的一种为栈式虚拟机设计的二进制指令形式,是一种新的平台无关的中间字节码格式。虚拟机加载执行WASM智能合约可以分为两个步骤:静态加载做LEB128解码和指令解析,动态执行解析后的WASM指令。其中第一步属于低频操作,第二步属于高频耗时操作。在第二步中,每当执行一个全局访问指令,都要进行一次越界检查,所述越界检查用于确定全局访问指令中全局变量的下标是否超出合约SCORE中定义的全局变量下标范围,以防止出现安全漏洞和恶意攻击。所述越界检查使得智能合约执行效率降低。在包括但不限于区块链的各种应用场景中,WASM虚拟机解释器对字节码的解释执行速度对于整个系统的性能都至关重要。因此,希望能有改进的方案,进一步提高WASM虚拟机中字节码指令流的执行效率。
技术实现思路
本说明书实施例旨在提供一种更有效的执行功能模块的方法,以解决现有技术中的不足。为实现上述目的,本说明书一个方面提供一种在虚拟机中执行功能模块的方法,所述功能模块在第一模块中定义,所述方法包括:获取所述第一模块的WASM指令序列;基于所述第一模块的WASM指令序列确定全局变量标识范围;基于所述全局变量标识范围,对所述第一模块的WASM指令序列中的每个指令进行全局变量标识检查,以确定是否执行所述功能模块。在一种实施方式中,对所述第一模块的WASM指令序列中的每个指令进行全局变量标识检查包括:解析该指令是否为全局变量访问指令;在解析出所述指令为全局变量访问指令的情况中,检查该指令包括的全局变量标识是否在所述全局变量标识范围内,以确定是否执行所述功能模块;在确定所述第一模块的WASM指令序列中不包括全局变量访问指令的情况中,解释执行所述功能模块的WASM指令序列。在一种实施方式中,检查该指令包括的全局变量标识是否在所述全局变量标识范围内,以确定是否执行所述功能模块包括,在检查出该指令包括的全局变量标识超出所述全局变量标识范围的情况中,结束对所述第一模块的处理;在检查所述第一模块的各个全局变量访问指令中包括的全局变量标识都在所述全局变量标识范围内的情况中,解释执行所述功能模块的WASM指令序列。在一种实施方式中,所述虚拟机为区块链节点中的虚拟机,所述第一模块为第一合约,其中,获取所述第一模块的WASM指令序列包括,在执行调用第一合约中的函数的第一交易时,从本地存储介质中读取第一合约的指令序列,以获取所述第一合约的WASM指令序列。在一种实施方式中,从本地存储介质中读取第一合约的指令序列包括,从本地存储介质中读取第一合约的经可变长编码的指令序列,对所述经可变长编码的指令序列进行解码,以获取所述第一合约的WASM指令序列。在一种实施方式中,所述方法还包括,在检查出该指令包括的全局变量标识超出所述全局变量标识范围的情况中,相对于所述第一交易进行报错处理。本说明书另一方面提供一种在虚拟机中执行功能模块的装置,所述功能模块在第一模块中定义,所述装置包括:获取单元,配置为,获取所述第一模块的WASM指令序列;确定单元,配置为,基于所述第一模块的WASM指令序列确定全局变量标识范围;检查单元,配置为,基于所述全局变量标识范围,对所述第一模块的WASM指令序列中的每个指令进行全局变量标识检查,以确定是否执行所述功能模块。在一种实施方式中,所述检查单元包括:解析子单元,配置为,解析该指令是否为全局变量访问指令;检查子单元,配置为,在解析出所述指令为全局变量访问指令的情况中,检查该指令包括的全局变量标识是否在所述全局变量标识范围内,以确定是否执行所述功能模块;第一执行子单元,配置为,在确定所述第一模块的WASM指令序列中不包括全局变量访问指令的情况中,解释执行所述功能模块的WASM指令序列。在一种实施方式中,所述检查子单元包括,结束子单元,配置为,在检查出该指令包括的全局变量标识超出所述全局变量标识范围的情况中,结束对所述第一模块的处理;第二执行子单元,配置为,在检查所述第一模块的各个全局变量访问指令中包括的全局变量标识都在所述全局变量标识范围内的情况中,解释执行所述功能模块的WASM指令序列。在一种实施方式中,所述虚拟机为区块链节点中的虚拟机,所述第一模块为第一合约,其中,所述获取单元还配置为,在执行调用第一合约中的函数的第一交易时,从本地存储介质中读取第一合约的指令序列,以获取所述第一合约的WASM指令序列。在一种实施方式中,所述获取单元包括,读取子单元,配置为,从本地存储介质中读取第一合约的经可变长编码的指令序列,解码子单元,配置为,对所述经可变长编码的指令序列进行解码,以获取所述第一合约的WASM指令序列。在一种实施方式中,所述装置还包括,报错单元,配置为,在检查出该指令包括的全局变量标识超出所述全局变量标识范围的情况中,相对于所述第一交易进行报错处理。本说明书另一方面提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行上述任一项方法。本说明书另一方面提供一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现上述任一项方法。通过根据本说明书实施例的智能合约执行方案,在解释执行指令序列之前的静态解析过程中,对合约SCORE的指令序列进行一次全局变量下标越界的检查,而不需要每次执行全局变量访问指令时都进行一次下标越界检查,大大本文档来自技高网
...

【技术保护点】
1.一种在虚拟机中执行功能模块的方法,所述功能模块在第一模块中定义,所述方法包括:/n获取所述第一模块的WASM指令序列;/n基于所述第一模块的WASM指令序列确定全局变量标识范围;/n基于所述全局变量标识范围,对所述第一模块的WASM指令序列中的每个指令进行全局变量标识检查,以确定是否执行所述功能模块。/n

【技术特征摘要】
1.一种在虚拟机中执行功能模块的方法,所述功能模块在第一模块中定义,所述方法包括:
获取所述第一模块的WASM指令序列;
基于所述第一模块的WASM指令序列确定全局变量标识范围;
基于所述全局变量标识范围,对所述第一模块的WASM指令序列中的每个指令进行全局变量标识检查,以确定是否执行所述功能模块。


2.根据权利要求1所述的方法,其中,对所述第一模块的WASM指令序列中的每个指令进行全局变量标识检查包括:
解析该指令是否为全局变量访问指令;
在解析出所述指令为全局变量访问指令的情况中,检查该指令包括的全局变量标识是否在所述全局变量标识范围内,以确定是否执行所述功能模块。


3.根据权利要求2所述的方法,还包括,在确定所述第一模块的WASM指令序列中不包括全局变量访问指令的情况中,解释执行所述功能模块的WASM指令序列。


4.根据权利要求2所述的方法,其中,检查该指令包括的全局变量标识是否在所述全局变量标识范围内,以确定是否执行所述功能模块包括,
在检查出该指令包括的全局变量标识超出所述全局变量标识范围的情况中,结束对所述第一模块的处理。


5.根据权利要求4所述的方法,其中,检查该指令包括的全局变量标识是否在所述全局变量标识范围内,以确定是否执行所述功能模块还包括,在检查所述第一模块的各个全局变量访问指令中包括的全局变量标识都在所述全局变量标识范围内的情况中,解释执行所述功能模块的WASM指令序列。


6.根据权利要求2所述的方法,其中,所述虚拟机为区块链节点中的虚拟机,所述第一模块为第一合约,其中,获取所述第一模块的WASM指令序列包括,在执行调用第一合约中的函数的第一交易时,从本地存储介质中读取第一合约的指令序列,以获取所述第一合约的WASM指令序列。


7.根据权利要求6所述的方法,其中,从本地存储介质中读取第一合约的指令序列包括,从本地存储介质中读取第一合约的经可变长编码的指令序列,对所述经可变长编码的指令序列进行解码,以获取所述第一合约的WASM指令序列。


8.根据权利要求6所述的方法,还包括,在检查出该指令包括的全局变量标识超出所述全局变量标识范围的情况中,相对于所述第一交易进行报错处理。


9.一种在虚拟机中执行功能模块的装置,所述功能模块在第一模块中定义,所述装置包括:
获取单元,配置为,获取所述第一模块的WASM指令序列;
确定单元,配置为...

【专利技术属性】
技术研发人员:郭学鹏林志平
申请(专利权)人:支付宝杭州信息技术有限公司
类型:发明
国别省市:浙江;33

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1