CN116680014B - 数据处理方法和装置 - Google Patents
数据处理方法和装置 Download PDFInfo
- Publication number
- CN116680014B CN116680014B CN202310961377.2A CN202310961377A CN116680014B CN 116680014 B CN116680014 B CN 116680014B CN 202310961377 A CN202310961377 A CN 202310961377A CN 116680014 B CN116680014 B CN 116680014B
- Authority
- CN
- China
- Prior art keywords
- function
- program
- module
- binary file
- program modules
- 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.)
- Active
Links
- 238000003672 processing method Methods 0.000 title abstract description 10
- 238000000034 method Methods 0.000 claims abstract description 32
- 230000004044 response Effects 0.000 claims abstract description 7
- 230000006870 function Effects 0.000 claims description 318
- 230000008676 import Effects 0.000 claims description 52
- 230000015654 memory Effects 0.000 claims description 27
- 230000008569 process Effects 0.000 description 7
- 238000010586 diagram Methods 0.000 description 5
- 230000005540 biological transmission Effects 0.000 description 3
- 229910052799 carbon Inorganic materials 0.000 description 2
- 238000009795 derivation Methods 0.000 description 2
- OKTJSMMVPCPJKN-UHFFFAOYSA-N Carbon Chemical compound [C] OKTJSMMVPCPJKN-UHFFFAOYSA-N 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 229910021389 graphene Inorganic materials 0.000 description 1
- JEIPFZHSYJVQDO-UHFFFAOYSA-N iron(III) oxide Inorganic materials O=[Fe]O[Fe]=O JEIPFZHSYJVQDO-UHFFFAOYSA-N 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 229920001690 polydopamine Polymers 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
- G06F9/449—Object-oriented method invocation or resolution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Energy 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)
- Stored Programmes (AREA)
Abstract
本申请一个或多个实施例提供一种数据处理方法和装置,该方法包括:响应于获取到的与任一程序模块的程序代码对应的WebAssembly二进制文件,从该二进制文件中删除由程序模块提供给其他程序模块进行调用的导出函数的函数标识;确定由程序模块调用的其他程序模块,并获取与其他程序模块对应的调用信息;其中,调用信息包括由程序模块提供的可调用函数的函数标识和函数索引;根据该二进制文件中由程序模块从其他程序模块中调用的导入函数的函数标识,从调用信息中确定出与函数标识对应的函数索引,并将该二进制文件中导入函数的函数标识替换为函数索引;将更新后的该二进制文件作为与程序模块的程序代码对应的该二进制文件进行存储。
Description
技术领域
本申请一个或多个实施例涉及计算机技术领域,尤其涉及一种数据处理方法和装置。
背景技术
WebAssembly是一种新的编码格式,其类似于一种低级的汇编语言,但是可以提供新的性能特性和效果。WebAssembly设计的目的是为高级语言(例如:C、C++、Rust等)提供一个高效的编译目标。
模块是WebAssembly程序编译、传输和加载的单位。基于高级语言编写的程序(例如:应用程序、程序库、系统函数等)的程序代码,可以被编译成WebAssembly程序模块。WebAssembly程序模块实际上是一种以WebAssembly二进制文件的形式呈现的字节码,可以被加载到WebAssembly虚拟机中,由WebAssembly虚拟机解释成机器码并执行。WebAssembly二进制文件通常以.wasm作为文件后缀。
资源受限设备通常是指电量供应有限、计算能力有限以及存储容量有限的电子设备,包括智能卡、安全元件(Secure Element,SE)、物联网设备等。也即,资源受限设备的非易失性存储器(Non-Volatile Memory,NVM)资源有限,一般大小为几十kB至几百kB,最大为几MB;资源受限设备的随机存取存储器(Random Access Memory,RAM)资源也有限,一般为几kB至几十kB。
由于资源受限设备的NVM资源和RAM资源有限,通常不能将标准的WebAssembly技术直接应用于资源受限设备,而是需要进行相应的优化。
发明内容
本申请一个或多个实施例提供技术方案如下:
本申请提供一种数据处理方法,所述方法包括:
响应于获取到的与任一程序模块的程序代码对应的WebAssembly二进制文件,从所述WebAssembly二进制文件中删除导出函数的函数标识;其中,所述导出函数为由所述程序模块提供给其他程序模块进行调用的函数;
确定由所述程序模块调用的其他程序模块,并获取与所述其他程序模块对应的调用信息;其中,所述调用信息包括由所述程序模块提供的可调用函数的函数标识和函数索引;
根据所述WebAssembly二进制文件中导入函数的函数标识,从所述调用信息中确定出与所述函数标识对应的函数索引,并将所述WebAssembly二进制文件中所述导入函数的函数标识替换为所述函数索引;其中,所述导入函数为由所述程序模块从其他程序模块中调用的函数;
将更新后的所述WebAssembly二进制文件作为与所述程序模块的程序代码对应的WebAssembly二进制文件进行存储。
本申请还提供一种数据处理装置,所述装置包括:
删除单元,用于响应于获取到的与任一程序模块的程序代码对应的WebAssembly二进制文件,从所述WebAssembly二进制文件中删除导出函数的函数标识;其中,所述导出函数为由所述程序模块提供给其他程序模块进行调用的函数;
获取单元,用于确定由所述程序模块调用的其他程序模块,并获取与所述其他程序模块对应的调用信息;其中,所述调用信息包括由所述程序模块提供的可调用函数的函数标识和函数索引;
替换单元,用于根据所述WebAssembly二进制文件中导入函数的函数标识,从所述调用信息中确定出与所述函数标识对应的函数索引,并将所述WebAssembly二进制文件中所述导入函数的函数标识替换为所述函数索引;其中,所述导入函数为由所述程序模块从其他程序模块中调用的函数;
存储单元,用于将更新后的所述WebAssembly二进制文件作为与所述程序模块的程序代码对应的WebAssembly二进制文件进行存储。
本申请还提供一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如上述任一项所述方法的步骤。
本申请还提供一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如上述任一项所述方法的步骤。
在上述技术方案中,一方面,可以从与任一程序模块的程序代码对应的WebAssembly二进制文件中,删除由该程序模块提供给其他程序模块进行调用的导出函数的函数标识,而保留该导出函数的函数索引;另一方面,可以获取与由该程序模块调用的其他程序模块对应的调用信息,以根据该WebAssembly二进制文件中由该程序模块从其他程序模块中调用的导入函数的函数标识,从该调用信息中确定出与该函数标识对应的函数索引,并将该WebAssembly二进制文件中该导入函数的函数标识替换为该函数索引;后续,即可将更新后的该WebAssembly二进制文件作为与该程序模块的程序代码对应的WebAssembly二进制文件进行存储。
采用上述方式,由于更新后的WebAssembly二进制文件仅包含导出函数的函数索引,而不再包含导出函数的函数标识,由此可以减少在存储WebAssembly二进制文件时对NVM资源的占用。此外,由于更新后的WebAssembly二进制文件包含导入函数的函数标识被替换为了导入函数的函数索引,由此可以在WebAssembly程序模块的加载阶段,简化针对不同模块的链接过程,从而可以更快地完成模块的加载,提高模块的加载效率。
附图说明
下面将对示例性实施例的描述中所需要使用的附图进行说明,其中:
图1是本申请一示例性实施例示出的一种数据处理方法的流程图;
图2是本申请一示例性实施例示出的一种设备的结构示意图;
图3是本申请一示例性实施例示出的一种数据处理装置的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或者相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请一个或多个实施例相一致的所有实施方式。相反,它们仅是与本申请一个或多个实施例的一些方面相一致的例子。
需要说明的是,在其他实施例中并不一定按照本申请示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本申请所描述的更多或者更少。此外,本申请中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本申请中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
为了便于理解,下面先对标准的WebAssembly二进制文件的数据格式进行简要说明。
WebAssembly程序模块包含其程序代码中的函数、表、内存、全局变量、导入信息、导出信息等;另外,还包含内存和表的初始化数据以及模块的入口函数。
作为WebAssembly程序模块的呈现形式的WebAssembly二进制文件一共有11种数据段,分别为类型段、导入段、函数段、表段、内存段、全局段、导出段、起始段、元素段、代码段、数据段和自定义段。其中:
(1)类型段
类型段存储模块使用到的所有函数类型。
(2)导入段和导出段
导入段存储模块所有的导入项目(例如:导入函数的函数名称、与导入函数对应的模块名称),导出段存储模块所有的导出项目(例如:导出函数的函数名称和函数索引)。多个模块可以通过导入项目和导出项目链接在一起。一个模块可以根据该模块包含的导入段中与导入函数对应的模块名称以及导入函数的函数名称,确定该模块需要调用的其他模块以及其他模块中的函数;相应地,一个模块可以对外提供该模块包含的导出段中的导出函数的函数名称,从而使其他模块可以通过将导出函数的函数名称以及该模块的模块名称(通常存储在自定义段中)添加到其他模块包含的导入段中,调用该模块中的导出函数。
(3)函数段和代码段
模块内的函数信息分开存储在函数段和代码段中。函数段存储模块内所有函数对应类型索引,代码段存储模块内所有函数的局部变量信息和字节码。函数段和代码段存储的项目数量一致,且一一对应。
(4)表段和元素段
表段存储模块内定义的所有表,元素段存储表初始化数据。
(5)内存段和数据段
内存段存储模块内定义的所有内存,数据段存储常量和内存初始化数据。
(6)全局段
全局段存储模块内定义的所有全局变量信息。
(7)起始段
起始段存储模块的入口函数索引。
(8)自定义段
自定义段存储自定义信息,包括模块名称、数据段属性等。自定义段还包含namesection字段,该字段中存储函数名、局部变量名等调试信息和第三方扩展信息。
在标准的WebAssembly二进制文件中,导入段包含导入函数的函数名称以及与导入函数对应的模块名称,导出段包含导出函数的函数名称,自定义段包含该模块的模块名称。在加载WebAssembly程序模块本身,以及与该模块存在调用关系的其他模块时,通常会对该模块和其他模块包含的导入段、导出段和自定义段中的模块名称和函数名称进行匹配,以确定这些模块以及这些模块中的函数之间的调用关系,从而根据所确定的调用关系将这些模块链接起来。例如,假设模块A包含的导入段中的模块名称与模块B包含的自定义段中的函数名称匹配,且模块A包含的导入段中的导入函数A1的函数名称与模块B包含的导出段中的导出函数B1的函数名称匹配,则可以确定模块A调用模块B中的导出函数B1,因此模块A和模块B之间的链接关系为模块B→模块A。
也即,在WebAssembly程序模块的加载阶段,需要使用大量标准的WebAssembly二进制文件包含的导入段、导出段和自定义段中的模块名称和函数名称。相应地,存储标准的WebAssembly二进制文件就需要占用大量的NVM资源。
基于如前所述的标准的WebAssembly二进制文件,本申请提供一种针对标准的WebAssembly技术进行优化的技术方案,以减少在存储WebAssembly二进制文件时对NVM资源的占用。
请参考图1,图1是本申请一示例性实施例示出的一种数据处理方法。
在本实施例中,上述数据处理方法可以应用于任意一个电子设备。其中,该电子设备可以是智能卡、安全元件(Secure Element,SE)、物联网设备等资源受限设备;或者,该电子设备可以是其他具有NVM资源且具有一定的计算能力的设备,使得该电子设备上搭载的WebAssembly虚拟机可以从该电子设备上搭载的NVM中加载WebAssembly程序模块,例如:包含一台独立的物理主机的服务器、由多台互相独立的物理主机构成的服务器集群、台式计算机、笔记本电脑、掌上电脑(PDAs,Personal Digital Assistants)等。
在实际的应用中,WebAssembly虚拟机可以基于软件方式来实现,NVM则可以是作为电子设备的组成部分的硬件。
上述数据处理方法可以包括以下步骤:
步骤101:响应于获取到的与任一程序模块的程序代码对应的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二进制文件所需的NVM资源得以减少。并且,由于更新后的WebAssembly二进制文件仍然包含导出函数的函数索引,使得仍然可以根据一个导出函数的函数索引在模块中查找到该导出函数。
步骤102:确定由所述程序模块调用的其他程序模块,并获取与所述其他程序模块对应的调用信息;其中,所述调用信息包括由所述程序模块提供的可调用函数的函数标识和函数索引。
在本实施例中,如果WebAssembly二进制文件不再包含导出函数的函数标识,则对于存在调用关系的不同的WebAssembly程序模块而言,就无法再对作为调用方的模块包含的导入函数的函数名称和作为被调用方的模块包含的导出函数的函数名称进行匹配,因此无法确定模块之间的调用关系。在这种情况下,就需要对上述WebAssembly二进制文件包含的导入函数的函数标识(例如:函数名称)进行更新。其中,导入函数为由该程序模块从其他程序模块中调用的函数。
具体地,可以先确定由上述程序模块调用的其他程序模块,并获取与该其他程序模块对应的调用信息。其中,该调用信息可以包括该其他程序模块提供的可调用函数的函数标识和函数索引。
在实际的应用中,在一个例子中,上述电子设备可以维护程序模块与调用信息的对应关系。该对应关系中的调用信息可以包括由程序模块提供给其他程序模块进行调用的函数的函数标识和函数索引。在这种情况下,该电子设备可以从所维护的该对应关系中获取与上述其他程序模块对应的调用信息。
在另一个例子中,可以由与该电子设备建立了连接的其他设备,或者该电子设备可访问的数据库维护程序模块与调用信息的对应关系。该对应关系中的调用信息可以包括由程序模块提供给其他程序模块进行调用的函数的函数标识和函数索引。在这种情况下,该电子设备可以从其他设备处或从该数据库中获取与上述其他程序模块对应的调用信息。
此外,可以按照一定的数据格式,将与一个程序模块对应的所有调用信息组织成与该程序模块对应的一个导出文件。其中,该导出文件的文件名可以是该程序模块的模块标识(例如:模块名称)。导出文件可以以.wasme为文件后缀。
步骤103:根据所述WebAssembly二进制文件中导入函数的函数标识,从所述调用信息中确定出与所述函数标识对应的函数索引,并将所述WebAssembly二进制文件中所述导入函数的函数标识替换为所述函数索引;其中,所述导入函数为由所述程序模块从其他程序模块中调用的函数。
在本实施例中,可以对上述WebAssembly二进制文件中上述导入函数的函数标识,与上述调用信息中的函数标识进行匹配,以从该调用信息中确定出与该导入函数的函数标识匹配的函数标识,从而可以从该调用信息中确定出与该函数标识对应的函数索引。例如,假设在与模块B对应的调用信息中匹配到模块A包含的导入段中的导入函数A1的函数名称,则说明模块A调用模块B中的具有该函数名称的导出函数,因此可以从与模块B对应的调用信息中确定出与该函数名称对应的函数索引。
进一步地,可以确定出上述WebAssembly二进制文件包含的上述导入函数的函数标识,并将该WebAssembly二进制文件中该导入函数的函数标识替换为从上述调用信息中确定出的上述函数索引,以对该WebAssembly二进制文件进行更新。
在一些实施例中,更新前的上述WebAssembly二进制文件可以与标准的WebAssembly二进制文件类似,包含用于存储上述导入函数的函数标识的导入段。在这种情况下,可以从该导入段中提取出各个导入函数的函数标识,并且可以将该导入段中各个导入函数的函数标识替换为各个导入函数的函数索引。
由于更新后的WebAssembly二进制文件包含导入函数的函数索引,使得可以根据一个导入函数的函数索引直接在被调用的其他模块中查找到该导入函数,而不再需要对不同模块包含的导入段、导出段中的函数名称进行匹配。
步骤104:将更新后的所述WebAssembly二进制文件作为与所述程序模块的程序代码对应的WebAssembly二进制文件进行存储。
在本实施例中,可以将更新后的上述WebAssembly二进制文件作为与上述程序模块的程序代码对应的WebAssembly二进制文件,并将更新后的该WebAssembly二进制文件存储在上述电子设备上搭载的NVM中,或者将更新后的该WebAssembly二进制文件发送给其他设备,由其他设备将更新后的该WebAssembly二进制文件存储在其他设备上搭载的NVM中。
也即,后续在由某个电子设备加载上述程序模块时,可以由该电子设备上搭载的WebAssembly虚拟机从该电子设备上搭载的NVM中读取更新后的上述WebAssembly二进制文件,并将更新后的该WebAssembly二进制文件解释成机器码。
在一些实施例中,可以从上述WebAssembly二进制文件中提取出上述导出函数的函数标识和函数索引,并基于该函数标识和该函数索引生成与上述程序模块对应的调用信息。以此类推,即可为各个程序模块生成与各个程序模块对应的调用信息,并对所生成的与各个程序模块对应的调用信息进行存储。
需要说明的是,在WebAssembly程序模块的加载阶段,只需要使用到更新后的上述WebAssembly二进制文件,而不需要使用到与任何程序模块对应的调用信息,因此对于需要加载WebAssembly程序模块的电子设备而言,该电子设备仅需存储更新后的该WebAssembly二进制文件,而不需要存储与任何程序模块对应的调用信息。
在一些实施例中,所维护的程序模块与调用信息的对应关系具体可以是程序模块的模块标识与调用信息的对应关系。在这种情况下,在确定由上述程序模块调用的其他程序模块,并获取与该其他程序模块对应的调用信息时,具体可以从上述WebAssembly二进制文件中提取出由该程序模块调用的其他程序模块的模块标识,并获取与该模块标识对应的调用信息,此时获取到的该调用信息即为与该其他程序模块对应的调用信息。
在一些实施例中,上述WebAssembly二进制文件包含的导入段不仅可以用于存储上述导入函数的函数标识,还可以用于存储由上述程序模块调用的其他程序模块的模块标识。在这种情况下,就可以从该导入段中提取出由该程序模块调用的其他程序模块的模块标识。
在一些实施例中,由于所维护的程序模块与调用信息的对应关系具体可以是程序模块的模块标识与调用信息的对应关系,在从上述WebAssembly二进制文件中提取出上述导出函数的函数标识和函数索引,并基于该函数标识和该函数索引生成与上述程序模块对应的调用信息时,具体可以从该WebAssembly二进制文件中提取出该程序模块的模块标识、该导出函数的函数标识和函数索引,并将该函数标识和该函数索引作为该程序模块的调用信息,生成该程序模块的模块标识与该调用信息的对应关系。以此类推,即可针对任意一个程序模块,生成该程序模块的模块标识与该程序模块的调用信息的对应关系,并对所生成的对应关系进行存储。
在一些实施例中,上述WebAssembly二进制文件可以与标准的WebAssembly二进制文件类似,包含用于存储上述程序模块的模块标识的自定义段。在这种情况下,可以从该自定义段中提取出该程序模块自身的模块标识。
在上述技术方案中,一方面,可以从与任一程序模块的程序代码对应的WebAssembly二进制文件中,删除由该程序模块提供给其他程序模块进行调用的导出函数的函数标识,而保留该导出函数的函数索引;另一方面,可以获取与由该程序模块调用的其他程序模块对应的调用信息,以根据该WebAssembly二进制文件中由该程序模块从其他程序模块中调用的导入函数的函数标识,从该调用信息中确定出与该函数标识对应的函数索引,并将该WebAssembly二进制文件中该导入函数的函数标识替换为该函数索引;后续,即可将更新后的该WebAssembly二进制文件作为与该程序模块的程序代码对应的WebAssembly二进制文件进行存储。
采用上述方式,由于更新后的WebAssembly二进制文件仅包含导出函数的函数索引,而不再包含导出函数的函数标识,由此可以减少在存储WebAssembly二进制文件时对NVM资源的占用。此外,由于更新后的WebAssembly二进制文件包含导入函数的函数标识被替换为了导入函数的函数索引,由此可以在WebAssembly程序模块的加载阶段,简化针对不同模块的链接过程,从而可以更快地完成模块的加载,提高模块的加载效率。
与前述数据处理方法的实施例相对应,本申请还提供了数据处理装置的实施例。
请参考图2,图2是本申请一示例性实施例示出的一种设备的结构示意图。在硬件层面,该设备包括处理器201、内部总线202、网络接口203、内存204以及非易失性存储器205,当然还可能包括所需要的其他硬件。本申请一个或多个实施例可以基于软件方式来实现,比如由处理器201从非易失性存储器205中读取对应的计算机程序到内存204中然后运行。当然,除了软件实现方式之外,本申请一个或多个实施例并不排除其他实现方式,比如逻辑器件或者软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑模块,也可以是硬件或者逻辑器件。
请参考图3,图3是本申请一示例性实施例示出的一种数据处理装置的框图。
上述数据处理装置可以应用于图2所示的设备,以实现本申请的技术方案。其中,该数据处理装置可以包括:
删除单元301,用于响应于获取到的与任一程序模块的程序代码对应的WebAssembly二进制文件,从所述WebAssembly二进制文件中删除导出函数的函数标识;其中,所述导出函数为由所述程序模块提供给其他程序模块进行调用的函数;
获取单元302,用于确定由所述程序模块调用的其他程序模块,并获取与所述其他程序模块对应的调用信息;其中,所述调用信息包括由所述程序模块提供的可调用函数的函数标识和函数索引;
替换单元303,用于根据所述WebAssembly二进制文件中导入函数的函数标识,从所述调用信息中确定出与所述函数标识对应的函数索引,并将所述WebAssembly二进制文件中所述导入函数的函数标识替换为所述函数索引;其中,所述导入函数为由所述程序模块从其他程序模块中调用的函数;
存储单元304,用于将更新后的所述WebAssembly二进制文件作为与所述程序模块的程序代码对应的WebAssembly二进制文件进行存储。
可选地,所述获取单元302具体用于:
从所述WebAssembly二进制文件中提取出由所述程序模块调用的其他程序模块的模块标识,并获取与所述模块标识对应的调用信息。
可选地,所述WebAssembly二进制文件包括:用于存储由所述程序模块调用的其他程序模块的模块标识和所述导入函数的函数标识的导入段;以及,用于存储所述导出函数的函数标识和函数索引的导出段。
可选地,所述装置还包括:
生成单元,用于从所述WebAssembly二进制文件中提取出所述导出函数的函数标识和函数索引,并基于所述函数标识和所述函数索引生成与所述程序模块对应的调用信息。
可选地,所述生成单元具体用于:
从所述WebAssembly二进制文件中提取出所述程序模块的模块标识、所述导出函数的函数标识和函数索引,并将所述函数标识和所述函数索引作为所述程序模块的调用信息,生成所述模块标识与所述调用信息的对应关系。
可选地,所述WebAssembly二进制文件包括:用于存储所述程序模块的模块标识的自定义段。
可选地,所述装置还包括:
编译单元,用于对所述程序模块的程序代码进行编译,得到与所述程序模块的程序代码对应的WebAssembly二进制文件。
可选地,所述程序模块包括应用模块、库模块和/或系统模块。
对于装置实施例而言,其基本对应于方法实施例,因此相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请的技术方案的目的。
上述实施例阐明的系统、装置、模块或者单元,具体可以由计算机芯片或者实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
在一个典型的配置中,计算机包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或者闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或者技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或者其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或者其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或者其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或者其他磁性存储设备或者任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确存储的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
上述对本申请特定实施例进行了描述。其他实施例在本申请的范围内。在一些情况下,在本申请中记载的动作或者步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
在本申请一个或多个实施例中所使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请一个或多个实施例。单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。术语“和/或”是指并包含一个或多个相关联的存储项目的任何或者所有可能组合。
在本申请一个或多个实施例中所使用的术语“一个实施例”、“一些实施例”、“示例”、“具体示例”或者“一种实施方式”等的描述意指结合该实施例所描述的具体特征或者特点包含于本申请的至少一个实施例中。对这些术语的示意性描述不必须针对相同的实施例。而且,所描述的具体特征或者特点可以在本申请一个或多个实施例中以合适的方式结合。此外,在不相互矛盾的情况下,可以将不同的实施例以及不同实施例中的具体特征或者特点进行结合。
应当理解,尽管在本申请一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或者“当……时”或者“响应于确定”。
以上所述仅为本申请一个或多个实施例的较佳实施例而已,并不用以限制本申请一个或多个实施例,凡在本申请一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请一个或多个实施例保护的范围之内。
Claims (11)
1.一种数据处理方法,所述方法包括:
响应于获取到的与任一程序模块的程序代码对应的WebAssembly二进制文件,从所述WebAssembly二进制文件包含的用于存储导出函数的函数名称和函数索引的导出段中删除所述导出函数的函数名称;其中,所述导出函数为由所述程序模块提供给其他程序模块进行调用的函数;
确定由所述程序模块调用的其他程序模块,并获取与所述其他程序模块对应的调用信息;其中,所述调用信息包括由所述程序模块提供的可调用函数的函数名称和函数索引;
根据所述WebAssembly二进制文件中导入函数的函数名称,从所述调用信息中确定出与所述函数名称对应的函数索引,并将所述WebAssembly二进制文件包含的用于存储所述导入函数的函数名称的导入段中所述导入函数的函数名称替换为所述函数索引;其中,所述导入函数为由所述程序模块从其他程序模块中调用的函数;
将更新后的所述WebAssembly二进制文件作为与所述程序模块的程序代码对应的WebAssembly二进制文件进行存储。
2.根据权利要求1所述的方法,所述确定由所述程序模块调用的其他程序模块,并获取与所述其他程序模块对应的调用信息,包括:
从所述WebAssembly二进制文件中提取出由所述程序模块调用的其他程序模块的模块标识,并获取与所述模块标识对应的调用信息。
3.根据权利要求2所述的方法,所述导入段还用于存储由所述程序模块调用的其他程序模块的模块标识。
4.根据权利要求1所述的方法,所述方法还包括:
从所述WebAssembly二进制文件中提取出所述导出函数的函数名称和函数索引,并基于所述函数名称和所述函数索引生成与所述程序模块对应的调用信息。
5.根据权利要求4所述的方法,所述从所述WebAssembly二进制文件中提取出所述导出函数的函数名称和函数索引,并基于所述函数名称和所述函数索引生成与所述程序模块对应的调用信息,包括:
从所述WebAssembly二进制文件中提取出所述程序模块的模块标识、所述导出函数的函数名称和函数索引,并将所述函数名称和所述函数索引作为所述程序模块的调用信息,生成所述模块标识与所述调用信息的对应关系。
6.根据权利要求5所述的方法,所述WebAssembly二进制文件还包括:用于存储所述程序模块的模块标识的自定义段。
7.根据权利要求1所述的方法,所述方法还包括:
对所述程序模块的程序代码进行编译,得到与所述程序模块的程序代码对应的WebAssembly二进制文件。
8.根据权利要求1所述的方法,所述程序模块包括应用模块、库模块和/或系统模块。
9.一种数据处理装置,所述装置包括:
删除单元,用于响应于获取到的与任一程序模块的程序代码对应的WebAssembly二进制文件,从所述WebAssembly二进制文件包含的用于存储导出函数的函数名称和函数索引的导出段中删除所述导出函数的函数名称;其中,所述导出函数为由所述程序模块提供给其他程序模块进行调用的函数;
获取单元,用于确定由所述程序模块调用的其他程序模块,并获取与所述其他程序模块对应的调用信息;其中,所述调用信息包括由所述程序模块提供的可调用函数的函数名称和函数索引;
替换单元,用于根据所述WebAssembly二进制文件中导入函数的函数名称,从所述调用信息中确定出与所述函数名称对应的函数索引,并将所述WebAssembly二进制文件包含的用于存储所述导入函数的函数名称的导入段中所述导入函数的函数名称替换为所述函数索引;其中,所述导入函数为由所述程序模块从其他程序模块中调用的函数;
存储单元,用于将更新后的所述WebAssembly二进制文件作为与所述程序模块的程序代码对应的WebAssembly二进制文件进行存储。
10.一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如权利要求1至8中任一项所述的方法。
11.一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如权利要求1至8中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310961377.2A CN116680014B (zh) | 2023-08-01 | 2023-08-01 | 数据处理方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310961377.2A CN116680014B (zh) | 2023-08-01 | 2023-08-01 | 数据处理方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116680014A CN116680014A (zh) | 2023-09-01 |
CN116680014B true CN116680014B (zh) | 2023-11-14 |
Family
ID=87789483
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310961377.2A Active CN116680014B (zh) | 2023-08-01 | 2023-08-01 | 数据处理方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116680014B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116974773B (zh) * | 2023-09-22 | 2024-01-05 | 紫光同芯微电子有限公司 | 程序数据链接方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115328506A (zh) * | 2022-09-01 | 2022-11-11 | 抖音视界有限公司 | 应用程序包生成方法、加载方法、装置、介质及设备 |
CN115982784A (zh) * | 2023-03-21 | 2023-04-18 | 紫光同芯微电子有限公司 | 一种WebAssembly模块调用函数的方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3262557A4 (en) * | 2015-02-26 | 2018-08-29 | Alpha Mice, Ltd. | A method to identify known compilers functions, libraries and objects inside files and data items containing an executable code |
-
2023
- 2023-08-01 CN CN202310961377.2A patent/CN116680014B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115328506A (zh) * | 2022-09-01 | 2022-11-11 | 抖音视界有限公司 | 应用程序包生成方法、加载方法、装置、介质及设备 |
CN115982784A (zh) * | 2023-03-21 | 2023-04-18 | 紫光同芯微电子有限公司 | 一种WebAssembly模块调用函数的方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN116680014A (zh) | 2023-09-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107025559B (zh) | 一种业务处理方法及装置 | |
US9563446B2 (en) | Binary file generation | |
CN116680015B (zh) | 函数调用方法、装置、电子设备及可读存储介质 | |
CN116680014B (zh) | 数据处理方法和装置 | |
CN111813805A (zh) | 一种数据处理方法及装置 | |
US20190087208A1 (en) | Method and apparatus for loading elf file of linux system in windows system | |
CN116661910B (zh) | 一种应用调用的方法及装置 | |
CN112380401B (zh) | 业务数据的核对方法和装置 | |
CN114064594B (zh) | 数据处理方法和装置 | |
CN116700629B (zh) | 数据处理方法和装置 | |
CN110569218B (zh) | 一种ext文件系统离线修改方法、装置及存储介质 | |
CN109409037B (zh) | 一种数据混淆规则的生成方法、装置及设备 | |
CN117251234B (zh) | 基于补丁的函数调用方法及装置 | |
CN110968333A (zh) | 配置信息替换方法和装置、机器可读存储介质及处理器 | |
CN116755845B (zh) | 数据处理方法和装置 | |
CN110968500A (zh) | 一种测试用例的执行方法及装置 | |
CN116700841B (zh) | 一种原生api调用的方法及装置 | |
CN114327941A (zh) | 一种服务提供方法及装置 | |
CN114691496A (zh) | 单元测试方法、装置、计算设备及介质 | |
CN116700840B (zh) | 文件执行方法、装置、电子设备及可读存储介质 | |
CN116955209B (zh) | WebAssembly虚拟机的测试方法和装置 | |
CN116932149A (zh) | 数据处理方法和装置 | |
CN117827747A (zh) | 自定义函数文件的管理方法、装置、设备及存储介质 | |
CN117608561A (zh) | 一种新增重复代码的确定方法及装置 | |
CN117033064A (zh) | 一种代码异常处理的方法及装置 |
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 |