CN116700840A - 文件执行方法、装置、电子设备及可读存储介质 - Google Patents

文件执行方法、装置、电子设备及可读存储介质 Download PDF

Info

Publication number
CN116700840A
CN116700840A CN202310973848.1A CN202310973848A CN116700840A CN 116700840 A CN116700840 A CN 116700840A CN 202310973848 A CN202310973848 A CN 202310973848A CN 116700840 A CN116700840 A CN 116700840A
Authority
CN
China
Prior art keywords
binary file
target
key data
webassemblem
segment
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
Application number
CN202310973848.1A
Other languages
English (en)
Other versions
CN116700840B (zh
Inventor
崔艳华
高景阳
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing CEC Huada Electronic Design Co Ltd
Original Assignee
Beijing CEC Huada Electronic Design Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing CEC Huada Electronic Design Co Ltd filed Critical Beijing CEC Huada Electronic Design Co Ltd
Priority to CN202310973848.1A priority Critical patent/CN116700840B/zh
Publication of CN116700840A publication Critical patent/CN116700840A/zh
Application granted granted Critical
Publication of CN116700840B publication Critical patent/CN116700840B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • YGENERAL 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
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE 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/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请提供一个或多个实施例提供一种文件执行方法、装置、电子设备及可读存储介质,应用于电子设备,该方法包括:获取目标WebAssembly二进制文件;加载所述目标WebAssembly二进制文件,并在加载WebAssembly二进制文件时,解析所述目标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二进制文件至少一个段中除所述关键数据外的其他数据是否满足与该段对应的规范;
如果是,丢弃除所述关键数据外的其他数据;反之,停止加载所述二进制文件。
本申请还提供一种文件执行装置,所述装置应用于电子设备,所述装置包括:
文件获取单元,用于获取目标WebAssembly二进制文件;所述目标WebAssembly二进制文件包括基于转换工具提取与目标应用代码对应的WebAssembly二进制文件中的关键数据,并重新将所述关键数据进行链接的WebAssembly二进制文件;所述关键数据包括在所述WebAssembly二进制文件执行时与业务处理对应的函数相关的数据;
文件加载单元,用于加载所述目标WebAssembly二进制文件,并在加载WebAssembly二进制文件时,解析所述目标WebAssembly二进制文件,从所述目标WebAssembly二进制文件中获取关键数据;
数据存储单元,用于将所述关键数据存储至所述电子设备的非易失性存储器;
文件执行单元,用于执行所述WebAssembly二进制文件,并在执行WebAssembly二进制文件时,从所述非易失性存储器中获取所述关键数据。
可选的,所述关键数据包括所述目标WebAssembly二进制文件中与至少一个段对应的关键数据;
数据存储单元,进一步用于分别确定存储所述目标WebAssembly二进制文件与至少一个段对应的关键数据所需的存储空间,并在所述电子设备的非易失性存储器中创建用于存储与该段对应的关键数据的存储空间;
将所述目标WebAssembly二进制文件中至少一个段对应的关键数据存储至与该段对应的存储空间。
可选的,所述装置还包括:
地址存储单元,用于分别确定存储所述目标WebAssembly二进制文件与至少一个段对应的关键数据的存储空间的索引地址,并将所述索引地址存储至预创建的地址索引表。
可选的,所述装置还包括:
内存空间存储单元,用于解析所述目标WebAssembly二进制文件,基于所述WebAssembly二进制文件中的全局段的数据确定存储全局变量所需的内存空间,并将所述内存空间的大小存储至所述电子设备的非易失性存储器。
可选的,将所述目标WebAssembly二进制文件中至少一个段对应的关键数据存储至与该段对应的存储空间之前,所述装置还包括:
数据验证单元,用于分别验证所述目标WebAssembly二进制文件至少一个段中除所述关键数据外的其他数据是否满足与该段对应的规范;
如果是,丢弃除所述关键数据外的其他数据;反之,停止加载所述二进制文件。
本申请还提供一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如上述任一项所述方法的步骤。
本申请还提供一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如上述任一项所述方法的步骤。
在以上技术方案中,可以通过转换工具提取WebAssembly二进制文件中的关键数据,并重新链接所述关键数据生成目标WebAssembly二进制文件;在加载目标WebAssembly二进制文件时,同时解析目标WebAssembly二进制文件,并将关键数据存储至非易失性存储器,并在执行所述目标WebAssembly二进制文件时,从非易失性存储器中获取关键数据,由此可以在资源受限的电子设备中运行WebAssembly二进制文件,由此提高WebAssembly二进制文件的使用场景。
附图说明
下面将对示例性实施例的描述中所需要使用的附图进行说明,其中:
图1是本申请一示例性实施例示出的一种文件执行方法的流程图。
图2是本申请一示例性实施例示出的一种电子设备的结构示意图。
图3是本申请一示例性实施例示出的一种基于文件执行装置的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或者相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请一个或多个实施例相一致的所有实施方式。相反,它们仅是与本申请一个或多个实施例的一些方面相一致的例子。
需要说明的是,在其他实施例中并不一定按照本申请示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本申请所描述的更多或者更少。此外,本申请中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本申请中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
为了便于理解,下面先对WebAssembly二进制文件的数据格式进行描述。
WebAssembly是一种字节码格式,它被设计用来在各种平台上运行,它还可以作为各种高级语言(如Rust、C++、C)的公共编译目标,并表现出比其他通用语言更好的运行时性能,该字节码可以实现编写一次到处运行。
模块是WebAssembly程序编译、传输和加载的单位,编译后的WebAssembly模块以二进制格式呈现,二进制文件以.wasm为后缀。
WebAssembly模块通常可以包含应用程序的函数、表、内存、全局变量、导入、导出信息;另外,还包括内存和表的初始化数据以及应用程序的函数。
WebAssembly二进制文件共有11种段。包括类型段、导入段、函数段、表段、内存段、全局段、导出段、起始段、元素段、代码段、数据段、以及自定义段。
其中,类型段,可以列出模块用到的所有函数类型。导入段,可以列出模块所有的导入项目,导出段,可以列出模块所有的导出项,多个模块可以通过导入和导出项链接在一起。模块内的函数信息分开存储在函数段和代码段中,函数段,可以列出模块内所有函数对应类型索引;代码段,可以存储模块内函数的局部变量信息和字节码。函数段和代码段存储的项目数量一致,且一一对应。表段,可以列出模块内定义的所有表,元素段,可以列出表初始化数据。内存段,可以列出模块内定义的所有内存,数据段,可以列出内存初始化数据。全局段,可以列出模块内定义的所有全局变量信息。起始段,可以列出模块的起始函数索引。自定义段,可以存放自定义数据,包括函数名、局部变量名等调试信息和第三方扩展信息等等。
通常,操作系统可以加载二进制文件到内存中,并在内存中将二进制文件中的每个段的信息存放在内存中的结构体中。在执行所述二进制文件时,可以从对应的二进制文件中获取需要的信息,并完成二进制文件的功能。
但是在资源受限的电子设备中,通常并没有足够的内存资源存放所述二进制文件中的全部信息,因此可能导致二进制文件无法在资源受限的电子设备中运行。
有鉴于此,本申请提出一种在加载WebAssembly应用模块时,将关键数据存储至电子设备中的非易失性存储器中,并在执行所述二进制文件时,从非易失性存储器中获取所述关键数据的技术方案。
请参考图1,图1是本申请一示例性实施例示出的一种文件执行方法。
在本实施例中,上述文件执行方法可以应用于任一电子设备,所述电子设备通常可以为资源受限设备。资源受限设备通常是指电量供应有限,计算能力有限、内存资源有限以及存储容量有限的电子设备。例如智能卡和安全单元(SE)、物联网设备等。所述方法包括以下步骤:
步骤102,获取目标WebAssembly二进制文件;所述目标WebAssembly二进制文件包括基于转换工具提取与目标应用代码对应的WebAssembly二进制文件中的关键数据,并重新将所述关键数据进行链接的WebAssembly二进制文件;所述关键数据包括在所述WebAssembly二进制文件执行时与业务处理对应的函数相关的数据。
在本说明书中,可以通过本地文件系统、或是通过网络请求、或是通过其他来源获取与目标应用代码对应的WebAssembly二进制文件,并通过转换工具,提取所述二进制文件中的关键数据,并生成目标WebAssembly二进制文件。
在一种实施方式中,所述关键数据可以是所述WebAssembly二进制文件中与至少一个段对应的关键数据。针对WebAssembly二进制文件中的不同段,其关键数据也并不相同。所述转换工具,可以分别从WebAssembly二进制文件的各个段中,提取关键数据,同时针对不同的关键数据重新进行链接。
其中,所述WebAssembly二进制文件中可以包括类型段、导入段、函数段、表段、内存段、全局段、导出段、起始段、元素段、代码段、数据段、以及自定义段。
在实际应用中,类型段(Type Section)用于定义函数类型,即函数的参数类型和返回值类型,通过类型段,虚拟机在解析WebAssembly二进制文件可以知道每个函数的类型信息以及返回值信息,从而在运行时正确处理函数调用和参数传递。
针对类型段,所述转换工具可以提取类型段中函数参数的个数,以及函数返回值的个数,并将函数参数个数存放至函数段中,而返回值个数通过代码段中的字节码体现。因此,在目标WebAssembly二进制文件中可以无需包括类型段。
导入段(Import Section)用于定义模块导入的外部功能,例如从其他模块或主机环境中导入的函数、全局变量和内存等。通过导入段,WebAssembly模块可以从外部导入所需的功能,并与其它模块或主机环境进行交互。
其中,导入段中可以包含多个导入项,因此,所述转换工具可以将导入段中相同的导入项的名称提取出来,并将导入项名称替换为模块标识,同时将导入函数的函数名转换为对应导入项的索引及导入函数在所述导入项中的索引。在加载目标WebAssembly二进制文件时,由此可以确定导入项的类型、与导入项对应的导入模块索引标识,以及与导入项对应的导入模块的存储地址,并作为所述关键数据进行提取并存储。
函数段(Function Section)用于定义模块内部的函数。函数段指定了模块中函数的数量以及每个函数的类型索引。虚拟机在解析WebAssembly二进制文件时可以根据类型段和函数段,确定每个函数的具体类型和签名信息,从而正确执行函数调用和参数传递。
所述转换工具可以提取类型段、函数段和代码段中的数据,并重新连接类型段、函数段和代码段,将函数的字节码大小、参数信息,操作数栈、局部变量信息、代码段中关键信息的地址作为关键数据存放在函数段。
需要说明的是,函数段中并不包含每个函数对应的字节码信息。而这个信息在WebAssembly二进制文件中的代码段,为了便于快速的获取这些信息,可以将存储代码段的关键信息的地址,也作为函数段的关键信息进行存储。在接收到代码段之后,确定存储代码段的关键信息的地址,并进一步将所述地址存储至函数段。
表段(Table Section)用于定义模块中的表。表是一种用于存储函数索引的数据结构。通过表段,可以定义一个或多个表,并指定其元素类型和大小限制。以使的后续模块的其他部分可以引用表来进行函数调用和跳转等操作。
表段通常需要使用元素段中的数据进行初始化,因此实际有效的内容为元素段中的数据,因此在目标WebAssembly二进制文件中可以无需包括表段。
内存段(Memory Section)用于定义模块中的内存。内存是一种用于存储线性缓冲区的数据结构,供WebAssembly模块使用。
由于在资源受限的电子设备中,资源受限的电子设备的操作系统对内存统一进行管理,因此转换工具无需提取此段中的内容,在目标WebAssembly二进制文件中可以无需包括内存段。
全局段(Global Section)中的关键数据可以包括只读数据起始地址、WebAssembly模块全局变量起始地址、WebAssembly模块有初值的全局变量大小以及全局变量结束地址。
所述转换工具可以结合自定义段的数据以及数据段的数据,并获取上述关键数据,并存储至目标WebAssembly二进制文件中的全局段。
导出段(Export Section)用于定义模块中可以被外部代码访问的函数、全局变量和内存。通过导出段,可以将模块内部的函数、表、内存或全局变量导出给外部代码,以便外部代码可以调用或访问这些导出项。
在实际应用中,只需要导出函数的函数索引,即可以定位导出函数在所述WebAssembly模块中的位置,所述转换工具可以将导出函数的函数索引可以作为关键数据进行提取。
需要说明的是,所述导出段的关键数据也可以包括内存或全局变量等其他信息,可以根据实际应用的需要进行设定,在本说明书中不做具体限定。
元素段(Element Section)用于初始化表(Table)中的元素。所述转换工具可以直接将表段中的元素作为关键数据进行提取。
代码段(Code Section)包含了WebAssembly模块中的函数定义,局部变量信息。同时,代码段中也包括每个函数的字节码。
所述转换工具可以提取局部变量信息,并存放至函数段;同时统计字节码中的信息,计算操作数栈,并将计算结果存放至函数段段。而在代码段中,所述转换工具可以直接将代码段中的字节码作为关键数据进行提取。
数据段(Data Section)用于初始化内存(Memory)中的数据。数据段包含了一系列的初始化数据,这些数据将被复制到内存中指定的位置。数据段的作用是在模块实例化时,将数据初始化到内存中。可以用于初始化全局变量、静态变量或其他需要预设值的数据结构。
所述转换工具可以将内存偏移,初始化数据长度等信息记录在全局段,并将数据段中的初始化数据作为关键数据进行提取。
自定义段(Custom Section),用于存储用户自定义的信息。自定义段允许开发者在WebAssembly模块中添加额外的元信息或附加数据,以满足特定需求或扩展功能。
所述转换工具可以按照实际需求确定自定义段中的哪些数据作为关键数据,并进行存储。
综上,所述转换工具可以将类型段中的参数个数合并至函数段,将返回值个数体现在代码段中的字节码中,同时将代码段中局部变量信息及字节码大小存放至函数段,使得函数段中包含函数字节码大小,函数操作数栈大小,函数参数个数以及函数局部变量个数。去掉表段,只保留元素段。同时针对其他段,只保留需要的关键数据,舍弃不必要的其他数据。
通过转换工具提取关键数据并重新连接后,目标WebAssembly二进制文件可以包含如下8个段:自定义段、导入段、函数段、全局段、导出段、元素段、代码段、数据段,从而使得结构更清晰简洁,可以节省资源受限设备中虚拟机进行解析链接的时间。
步骤104加载所述目标WebAssembly二进制文件,并在加载WebAssembly二进制文件时,解析所述目标WebAssembly二进制文件,从所述目标WebAssembly二进制文件中获取关键数据。
在本实施例中,虚拟机加载WebAssembly二进制文件,并在加载WebAssembly二进制文件时,并加载边解析所述WebAssembly二进制文件。
为了便于理解,下面先对虚拟机解析所述WebAssembly二进制文件进行描述。
虚拟机可以从WebAssembly二进制文件中读取字节数据,并按照WebAssembly二进制格式规范进行解析。所述WebAssembly二进制格式规范定义了各个段(section)的结构、字节编码方式以及其它的一些元数据信息。
进一步,虚拟机可以解析二进制文件的起始部分,所述二进制文件的起始部分具体可以包括魔数、版本号和模块标识等信息,以确保文件格式正确。
进一步,虚拟机可以根据WebAssembly二进制格式规范,虚拟机按照顺序解析二进制文件中的各个段。每个段包含特定类型的信息,如函数段包含函数签名、局部变量信息等。
进一步,虚拟机可以虚拟机根据解析的数据构建一个模块对象,用于表示WebAssembly模块。模块对象包含了模块的各种元素,如函数、内存和全局变量等。
进一步,虚拟机可以确定解析出的信息是否存在导入和导出的关系。如果存在导入和导出的关系,虚拟机会进行链接操作。它将根据模块的导入定义与外部提供的函数或变量进行匹配,并建立链接关系,以便在执行期间进行调用或访问。
不同的虚拟机在解析所述WebAssembly二进制文件可能会有一些细微的差异,但总体上遵循以上的基本流程。虚拟机通过解析二进制数据、构建模块对象、链接导入和导出等操作,使得WebAssembly模块能够在虚拟机中执行。
在本实施例中,虚拟机可以加载所述目标WebAssembly二进制文件,并在加载WebAssembly二进制文件时,同时解析所述目标WebAssembly二进制文件,从所述目标WebAssembly二进制文件中获取关键数据。
如前所述,所述目标WebAssembly二进制文件中可以包括导入段、函数段、全局段、导出段、元素段、代码段、数据段、自定义段。所述虚拟机可以在目标WebAssembly二进制文件中的这些段时,从这些段中获取关键数据。
所述关键数据的具体内容如前所述,针对导入段,所述关键数据可以是导入项的类型、与导入项对应的导入模块标识,以及与导入项对应的导入模块的存储地址。针对函数段,所述关键信息可以是函数段中至少一个函数的字节码大小、参数信息,操作数栈、局部变量信息。针对全局段,所述关键数据可以是只读数据起始地址、WebAssembly模块全局变量起始地址、WebAssembly模块有初值的全局变量大小以及全局变量结束地址。针对导出段,所述关键数据可以是导出函数的函数索引。针对元素段,所述关键数据可以是元素段中的元素。针对代码段,所述关键数据可以是每个函数的字节码。针对数据段,所述关键数据可以是初始化数据。针对内存段,可以按照实际需求确定自定义段中的哪些数据作为关键数据。
步骤106,将所述关键数据存储至所述电子设备的非易失性存储器;
为了便于理解,下面先对非易失性存储器进行描述。
非易失性存储器(Non-Volatile Memory,简称NVM),是一种可以将数据持久保存的存储器类型。与易失性存储器(如RAM)不同,非易失性存储器在断电或重新启动后仍能保留存储的数据。
在资源受限的电子设备中,由于易失性存储器的容量有限,因此可以将所述关键数据存储至所述电子设备的非易失性存储器,并在执行所述目标WebAssembly二进制文件时,从所述非易失性存储器中获取所述关键数据。
在一种实施方式中,所述关键数据可以是所述目标WebAssembly二进制文件中与至少一个段对应的关键数据。
在实际应用中,可以分别确定存储所述目标WebAssembly二进制文件与至少一个段对应的关键数据所需的存储空间,并在所述电子设备的非易失性存储器中创建用于存储与该段对应的关键数据的存储空间;
在创建存储空间之后,可以将所述目标WebAssembly二进制文件中至少一个段对应的关键数据存储至与该对应的存储空间。
如前文所述,在目标WebAssembly二进制文件中,不同段可以对应不同的关键数据,针对与不同段对应的关键数据,可以通过不同的方式,确定存储所述关键数据所需的存储空间,并在所述电子设备的非易失性存储器中创建用于存储与该段对应的关键数据的存储空间。
针对与导入段对应的关键数据,由于关键数据为与导入项相关的导入项的类型等等。因此可以基于导入项的数量,确定存储所述关键数据所需的存储空间,并在所述电子设备的非易失性存储器中创建相应的存储空间。
针对与函数段对应的关键数据,由于关键数据为至少一个函数的字节码大小、参数信息,操作数栈、局部变量信息和对应的字节码地址,因此可以根据函数个数确定存储所述关键数据所需的存储空间,并在所述电子设备的非易失性存储器中创建相应的存储空间。需要说明的是,所述字节码的地址在接收到代码段之后才能确定,因此需要为字节码的地址预留出存储空间。
针对与导出段对应的关键数据,由于关键数据为导出函数的函数索引,因此可以根据导出函数的数量确定存储所述关键数据所需的存储空间,并在所述电子设备的非易失性存储器中创建相应的存储空间。
针对与代码段对应的关键数据,由于关键数据为代码段的字节码,因此可以根据字节码的大小确定存储所述关键数据所需的存储空间,并在所述电子设备的非易失性存储器中创建相应的存储空间。
针对与数据段对应的关键数据,由于关键数据为初始化数据。因此初始化数据总大小即为所述关键数据所需的存储空间,并在所述电子设备的非易失性存储器中创建相应的存储空间。
在一种实施方式中,在所述电子设备的非易失性存储器中,还可以创建用于存储上述与各个段对应的存储空间的索引地址的地址索引表。
针对各个段对应的关键数据,在确定关键数据所需的存储空间,并在所述电子设备的非易失性存储器中创建用于存储与该段对应的关键数据的存储空间之后,可以确定该存储空间的索引地址,并将该存储空间的索引地址存储至预先创建的地址索引表中。
基于地址索引表,可以快速的确定各个段对应的关键数据在所述电子设备的非易失性存储器中的存储位置,由此在执行所述目标WebAssembly二进制文件时,无需额外进行查找,只需要通过所述地址索引表即可以快速的获取关键数据的存储位置。
在一种实施方式中,在解析所述目标WebAssembly二进制文件时,全局变量信息,也即全局变量在内存中的偏移和有初值的全局变量大小,需要需要存储在易失性存储器中,也即内存。所述目标WebAssembly二进制文件中的全局段的数据为只读数据起始地址、WebAssembly模块全局变量起始地址、WebAssembly模块有初值的全局变量大小以及全局变量结束地址。通过这些信息可以确定存储全局变量所需的内存空间,并将所述内存空间的大小和有初值的全局变量大小作为管理数据存储至电子设备的非易失性存储器,以用于在所述WebAssembly二进制文件执行时开辟线性内存,或者在内存溢出时进行检查。
在一种实施方式中,在将所述目标WebAssembly二进制文件中至少一个段对应的关键数据存储至与该对应的存储空间之前,还需要针对除所述关键数据之外的其他数据,确定所述其他数据是否满足与该段对应的规范。
如果是,即可丢弃除关键数据的其他数据;反之,可以停止加载所述目标WebAssembly二进制文件,并回收所述存储空间。
在本实施例中,针对所述其他数据的验证的方式,在本说明书中不做具体限定。例如,可以进行语法验证(Syntax Validation),对其他数据的的二进制表示进行解析,并验证其语法是否符合WebAssembly规范。又例如,可以进行类型检查(Type Checking),对其他数据中的指令序列进行类型推导和检查。通过分析操作数的类型和操作符的预期类型,确保指令序列在执行时不会出现类型错误。有例如,可以进行控制流验证(Control FlowValidation),确定函数之间的控制流是否正确。验证跳转指令(如条件分支和循环)的目标是否有效,以及函数调用是否匹配正确的函数签名等等。
步骤108,执行所述目标WebAssembly二进制文件,并在执行目标WebAssembly二进制文件时,从所述存储空间中获取所述关键数据。
所述虚拟机可以执行所述目标WebAssembly二进制文件,并在执行所述WebAssembly二进制文件时,从所述非易失性存储器中获取所述关键数据。
具体的,执行所述目标WebAssembly二进制文件时,可以从所述非易失性存储器中获取与函数相关的信息,将与业务处理对应的函数实例化为可执行的函数对象,使其可以在执行时被调用。如果目标WebAssembly二进制文件中导入了外部函数、内存或表,需要进行导入处理,即与外部环境进行关联,可以从非易失性存储器中获取相应的导入数据并进行导入处理。
在以上技术方案中,可以通过转换工具提取WebAssembly二进制文件中的关键数据,并重新链接所述关键数据生成目标WebAssembly二进制文件;在加载WebAssembly目标WebAssembly二进制文件时,同时解析WebAssembly二进制文件,并将关键数据存储至非易失性存储器,并在执行所述WebAssembly二进制文件时,从非易失性存储器中获取关键数据,由此可以在资源受限的电子设备中运行所述WebAssembly二进制文件,由此提高WebAssembly二进制文件的使用场景。
与前述文件执行方法的实施例相对应,本申请还提供了基于文件执行装置的实施例。
请参考图2,图2是本申请一示例性实施例示出的一种设备的结构示意图。在硬件层面,该设备包括处理器202、内部总线204、网络接口206、内存208以及非易失性存储器210,当然还可能包括所需要的其他硬件。本申请一个或多个实施例可以基于软件方式来实现,比如由处理器202从非易失性存储器210中读取对应的计算机程序到内存208中然后运行。当然,除了软件实现方式之外,本申请一个或多个实施例并不排除其他实现方式,比如逻辑器件或者软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑模块,也可以是硬件或者逻辑器件。
请参考图3,图3是本申请一示例性实施例示出的一种文件执行装置的框图。
上述文件执行装置可以应用于图2所示的设备,以实现本申请的技术方案。其中,该文件执行装置可以包括:
文件获取单元302,用于获取目标WebAssembly二进制文件;所述目标WebAssembly二进制文件包括基于转换工具提取与目标应用代码对应的WebAssembly二进制文件中的关键数据,并重新将所述关键数据进行链接的WebAssembly二进制文件;所述关键数据包括在所述WebAssembly二进制文件执行时与业务处理对应的函数相关的数据;
文件加载单元304,用于加载所述目标WebAssembly二进制文件,并在加载WebAssembly二进制文件时,解析所述目标WebAssembly二进制文件,从所述目标WebAssembly二进制文件中获取关键数据;
数据存储单元306,用于将所述关键数据存储至所述电子设备的非易失性存储器;
文件执行单元308,用于执行所述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 (12)

1.一种文件执行方法,所述方法应用于电子设备,所述方法包括:
获取目标WebAssembly二进制文件;所述目标WebAssembly二进制文件包括基于转换工具提取与目标应用代码对应的WebAssembly二进制文件中的关键数据,并重新将所述关键数据进行链接的WebAssembly二进制文件;所述关键数据包括在所述WebAssembly二进制文件执行时与业务处理对应的函数相关的数据;
加载所述目标WebAssembly二进制文件,并在加载WebAssembly二进制文件时,解析所述目标WebAssembly二进制文件,从所述目标WebAssembly二进制文件中获取关键数据;
将所述关键数据存储至所述电子设备的非易失性存储器;
执行所述WebAssembly二进制文件,并在执行WebAssembly二进制文件时,从所述非易失性存储器中获取所述关键数据。
2.根据权利要求1所述的方法,所述关键数据包括所述目标WebAssembly二进制文件中与至少一个段对应的关键数据;
将所述关键数据存储至所述电子设备的非易失性存储器,包括:
分别确定存储所述目标WebAssembly二进制文件与至少一个段对应的关键数据所需的存储空间,并在所述电子设备的非易失性存储器中创建用于存储与该段对应的关键数据的存储空间;
将所述目标WebAssembly二进制文件中至少一个段对应的关键数据存储至与该对应的存储空间。
3.根据权利要求2所述的方法,所述方法还包括:
分别确定存储所述目标WebAssembly二进制文件与至少一个段对应的关键数据的存储空间的索引地址,并将所述索引地址存储至预创建的地址索引表。
4.根据权利要求1所述的方法,所述方法还包括:
解析所述目标WebAssembly二进制文件,基于所述WebAssembly二进制文件中的全局段的数据确定存储全局变量所需的内存空间,并将所述内存空间的大小存储至所述电子设备的非易失性存储器。
5.根据权利要求2所述的方法,将所述目标WebAssembly二进制文件中至少一个段对应的关键数据存储至与该对应的存储空间之前,所述方法还包括:
分别验证所述目标WebAssembly二进制文件至少一个段中除所述关键数据外的其他数据是否满足与该段对应的规范;
如果是,丢弃除所述关键数据外的其他数据;反之,停止加载所述二进制文件。
6.一种文件执行装置,所述装置应用于电子设备,所述装置包括:
文件获取单元,用于获取目标WebAssembly二进制文件;所述目标WebAssembly二进制文件包括基于转换工具提取与目标应用代码对应的WebAssembly二进制文件中的关键数据,并重新将所述关键数据进行链接的WebAssembly二进制文件;所述关键数据包括在所述WebAssembly二进制文件执行时与业务处理对应的函数相关的数据;
文件加载单元,用于加载所述目标WebAssembly二进制文件,并在加载WebAssembly二进制文件时,解析所述目标WebAssembly二进制文件,从所述目标WebAssembly二进制文件中获取关键数据;
数据存储单元,用于将所述关键数据存储至所述电子设备的非易失性存储器;
文件执行单元,用于执行所述WebAssembly二进制文件,并在执行WebAssembly二进制文件时,从所述非易失性存储器中获取所述关键数据。
7.根据权利要求6所述的装置,所述关键数据包括所述目标WebAssembly二进制文件中与至少一个段对应的关键数据;
数据存储单元,进一步用于分别确定存储所述目标WebAssembly二进制文件与至少一个段对应的关键数据所需的存储空间,并在所述电子设备的非易失性存储器中创建用于存储与该段对应的关键数据的存储空间;
将所述目标WebAssembly二进制文件中至少一个段对应的关键数据存储至与该对应的存储空间。
8.根据权利要求7所述的装置,所述装置还包括:
地址存储单元,用于分别确定存储所述目标WebAssembly二进制文件与至少一个段对应的关键数据的存储空间的索引地址,并将所述索引地址存储至预创建的地址索引表。
9.根据权利要求6所述的装置,所述装置还包括:
内存空间存储单元,用于解析所述目标WebAssembly二进制文件,基于所述WebAssembly二进制文件中的全局段的数据确定存储全局变量所需的内存空间,并将所述内存空间的大小存储至所述电子设备的非易失性存储器。
10.根据权利要求7所述的装置,将所述目标WebAssembly二进制文件中至少一个段对应的关键数据存储至与该对应的存储空间之前,所述装置还包括:
数据验证单元,用于分别验证所述目标WebAssembly二进制文件至少一个段中除所述关键数据外的其他数据是否满足与该段对应的规范;
如果是,丢弃除所述关键数据外的其他数据;反之,停止加载所述二进制文件。
11.一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如权利要求1至5中任一项所述的方法。
12.一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如权利要求1至5中任一项所述的方法。
CN202310973848.1A 2023-08-03 2023-08-03 文件执行方法、装置、电子设备及可读存储介质 Active CN116700840B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310973848.1A CN116700840B (zh) 2023-08-03 2023-08-03 文件执行方法、装置、电子设备及可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310973848.1A CN116700840B (zh) 2023-08-03 2023-08-03 文件执行方法、装置、电子设备及可读存储介质

Publications (2)

Publication Number Publication Date
CN116700840A true CN116700840A (zh) 2023-09-05
CN116700840B CN116700840B (zh) 2023-09-26

Family

ID=87839592

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310973848.1A Active CN116700840B (zh) 2023-08-03 2023-08-03 文件执行方法、装置、电子设备及可读存储介质

Country Status (1)

Country Link
CN (1) CN116700840B (zh)

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050165837A1 (en) * 2004-01-22 2005-07-28 International Business Machines Corporation System and method for embedded java memory footprint performance improvement
US7246347B1 (en) * 2002-06-26 2007-07-17 Sun Microsystems, Inc Method and apparatus for loading class files into non-volatile memory
CN101719959A (zh) * 2009-12-14 2010-06-02 中兴通讯股份有限公司 移动终端关键文件自动备份和自动恢复的方法及装置
CN112711432A (zh) * 2020-12-31 2021-04-27 北京安博通科技股份有限公司 用于网络安全设备的特征库升级方法及装置
CN113467698A (zh) * 2020-03-30 2021-10-01 珠海全志科技股份有限公司 基于文件系统的写方法、装置、计算机设备和存储介质
CN115700470A (zh) * 2021-07-22 2023-02-07 阿里云计算有限公司 文件加载的处理方法和装置,计算机存储介质和电子设备
CN116069304A (zh) * 2023-04-06 2023-05-05 紫光同芯微电子有限公司 一种程序数据生成方法及装置
CN116126251A (zh) * 2023-04-04 2023-05-16 北京忆恒创源科技股份有限公司 一种实现多并发写入的方法、控制器和固态存储设备

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7246347B1 (en) * 2002-06-26 2007-07-17 Sun Microsystems, Inc Method and apparatus for loading class files into non-volatile memory
US20050165837A1 (en) * 2004-01-22 2005-07-28 International Business Machines Corporation System and method for embedded java memory footprint performance improvement
CN101719959A (zh) * 2009-12-14 2010-06-02 中兴通讯股份有限公司 移动终端关键文件自动备份和自动恢复的方法及装置
CN113467698A (zh) * 2020-03-30 2021-10-01 珠海全志科技股份有限公司 基于文件系统的写方法、装置、计算机设备和存储介质
CN112711432A (zh) * 2020-12-31 2021-04-27 北京安博通科技股份有限公司 用于网络安全设备的特征库升级方法及装置
CN115700470A (zh) * 2021-07-22 2023-02-07 阿里云计算有限公司 文件加载的处理方法和装置,计算机存储介质和电子设备
CN116126251A (zh) * 2023-04-04 2023-05-16 北京忆恒创源科技股份有限公司 一种实现多并发写入的方法、控制器和固态存储设备
CN116069304A (zh) * 2023-04-06 2023-05-05 紫光同芯微电子有限公司 一种程序数据生成方法及装置

Also Published As

Publication number Publication date
CN116700840B (zh) 2023-09-26

Similar Documents

Publication Publication Date Title
CN109976761B (zh) 软件开发工具包的生成方法、装置及终端设备
US9043757B2 (en) Identifying differences between source codes of different versions of a software when each source code is organized using incorporated files
CN106843842B (zh) 一种应用程序配置文件的更新方法及装置
US8818967B2 (en) Method for compressing identifiers
US20190087208A1 (en) Method and apparatus for loading elf file of linux system in windows system
CN116680015B (zh) 函数调用方法、装置、电子设备及可读存储介质
CN115982784B (zh) 一种WebAssembly模块调用函数的方法及装置
CN111078279A (zh) 字节码文件的处理方法、装置、设备及存储介质
CN115185550A (zh) 服务部署方法、装置、计算机设备及存储介质
CN113504918A (zh) 设备树配置优化方法、装置、计算机设备和存储介质
JP2017174418A (ja) モデルチェックのためのデータ構造抽象化
FR2827974A1 (fr) Procede pour la compression d'un code interprete par analyse semantique
CN116700629B (zh) 数据处理方法和装置
CN116680014B (zh) 数据处理方法和装置
CN111240772A (zh) 一种基于区块链的数据处理方法、装置及存储介质
CN109409037B (zh) 一种数据混淆规则的生成方法、装置及设备
CN116700840B (zh) 文件执行方法、装置、电子设备及可读存储介质
US8745605B2 (en) Execution contexts with polymorphic type implementations
CN111625225A (zh) 一种程序指定数据输出方法和装置
CN110968500A (zh) 一种测试用例的执行方法及装置
CN114706586A (zh) 代码编译、代码运行方法、装置、计算机设备及存储介质
CN116955209B (zh) WebAssembly虚拟机的测试方法和装置
CN112148746A (zh) 生成数据库表结构文档的方法、装置、电子装置和存储介质
CN117251234B (zh) 基于补丁的函数调用方法及装置
CN116700841B (zh) 一种原生api调用的方法及装置

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