CN116955209B - WebAssembly虚拟机的测试方法和装置 - Google Patents

WebAssembly虚拟机的测试方法和装置 Download PDF

Info

Publication number
CN116955209B
CN116955209B CN202311203863.4A CN202311203863A CN116955209B CN 116955209 B CN116955209 B CN 116955209B CN 202311203863 A CN202311203863 A CN 202311203863A CN 116955209 B CN116955209 B CN 116955209B
Authority
CN
China
Prior art keywords
binary file
webassemblem
webassembly
virtual machine
tree structure
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
Application number
CN202311203863.4A
Other languages
English (en)
Other versions
CN116955209A (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 CN202311203863.4A priority Critical patent/CN116955209B/zh
Publication of CN116955209A publication Critical patent/CN116955209A/zh
Application granted granted Critical
Publication of CN116955209B publication Critical patent/CN116955209B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • 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)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本申请一个或多个实施例提供一种WebAssembly虚拟机的测试方法和装置,所述方法包括:获取用于测试的WebAssembly二进制文件;基于WebAssembly虚拟机规范,对所述二进制文件进行解析,以生成与所述二进制文件对应的树状结构;其中,树状结构中的节点包含二进制文件中的单元数据;在可视化界面中,针对所述树状结构进行输出,并响应于用户通过所述可视化界面执行的针对所述树状结构的修改操作,对所述树状结构进行修改,并基于修改后的所述树状结构,对所述二进制文件进行修改;基于修改后的所述二进制文件,对WebAssembly虚拟机进行测试。

Description

WebAssembly虚拟机的测试方法和装置
技术领域
本申请一个或多个实施例涉及计算机技术领域,尤其涉及一种WebAssembly虚拟机的测试方法和装置。
背景技术
WebAssembly是一种新的编码格式,其类似于一种低级的汇编语言,但是可以提供新的性能特性和效果。WebAssembly设计的目的是为高级语言(例如:C、C++、Rust等)提供一个高效的编译目标。
模块是WebAssembly程序编译、传输和加载的单位。基于高级语言编写的程序(例如:应用程序、程序库、系统函数等)的程序代码,可以被编译成WebAssembly程序模块。WebAssembly程序模块实际上是一种以WebAssembly二进制文件的形式呈现的字节码,可以被加载到WebAssembly虚拟机中,由WebAssembly虚拟机解释成机器码并执行。WebAssembly二进制文件通常以.wasm作为文件后缀。
在实际的应用中,通常需要通过对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是本申请一示例性实施例示出的一种WebAssembly虚拟机的测试方法的流程图;
图2是本申请一示例性实施例示出的一种设备的结构示意图;
图3是本申请一示例性实施例示出的一种WebAssembly虚拟机的测试装置的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或者相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请一个或多个实施例相一致的所有实施方式。相反,它们仅是与本申请一个或多个实施例的一些方面相一致的例子。
需要说明的是,在其他实施例中并不一定按照本申请示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本申请所描述的更多或者更少。此外,本申请中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本申请中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
资源受限设备通常是指电量供应有限、计算能力有限以及存储容量有限的电子设备,包括智能卡、安全元件(Secure Element,SE)、物联网设备等。也即,资源受限设备的非易失性存储器(Non-Volatile Memory,NVM)资源有限,一般大小为几十kB至几百kB,最大为几MB;资源受限设备的随机存取存储器(Random Access Memory,RAM)资源也有限,一般为几kB至几十kB。
WebAssembly技术具有快速、高效、可移植的特点,可以在不同的平台上以接近本地速度运行。在实际的应用中,WebAssembly二进制文件通常可以被更快地加载、解析和执行。因此,WebAssembly技术可以较好地适用于资源受限设备。
在资源受限设备中使用WebAssembly技术时,需要将WebAssembly二进制文件加载到WebAssembly虚拟机中,由WebAssembly虚拟机将其解释成机器码并执行。在实际的应用中,通常需要通过对WebAssembly虚拟机进行测试,来保证WebAssembly虚拟机能够正常运行。
针对WebAssembly虚拟机的测试除了包括正向功能的测试之外,通常还需要包含一些异常情况的测试,以保证WebAssembly虚拟机能够处理这些异常情况。
相关技术中,可以由测试人员通过代码走查或代码插桩的方式,对WebAssembly虚拟机进行测试。然而,这种测试方法对测试人员有较高的要求,需要耗费大量的时间成本和人力成本,并且无法覆盖很多异常情况的测试,从而会影响测试的准确率和效率。
通过对WebAssembly二进制文件进行修改,并基于修改后的WebAssembly二进制文件对WebAssembly虚拟机进行测试,可以覆盖大部分异常情况的测试。然而,字节码对于用户而言通常是难以阅读和理解的,因此测试人员通常无法直接阅读和修改WebAssembly二进制文件,也会导致测试的准确率和效率都比较低下。
本申请一个或多个实施例提供一种用于WebAssembly虚拟机的测试的技术方案,通过该技术方案,可以较为容易地实现针对WebAssembly虚拟机的测试,提高针对WebAssembly虚拟机的测试的准确率和效率。
为了便于理解,下面先对标准的WebAssembly二进制文件的数据格式进行简要说明。
WebAssembly程序模块包含其程序代码中的函数、表、内存、全局变量、导入信息、导出信息等;另外,还包含内存和表的初始化数据以及模块的入口函数。
作为WebAssembly程序模块的呈现形式的WebAssembly二进制文件一共有11种数据段,分别为类型段、导入段、函数段、表段、内存段、全局段、导出段、起始段、元素段、代码段、数据段和自定义段。其中:
(1)类型段
类型段存储模块使用到的所有函数类型。
(2)导入段和导出段
导入段存储模块所有的导入项目(例如:导入函数的函数名称、与导入函数对应的模块名称),导出段存储模块所有的导出项目(例如:导出函数的函数名称和函数索引)。多个模块可以通过导入项目和导出项目链接在一起。一个模块可以根据该模块包含的导入段中与导入函数对应的模块名称以及导入函数的函数名称,确定该模块需要调用的其他模块以及其他模块中的函数;相应地,一个模块可以对外提供该模块包含的导出段中的导出函数的函数名称,从而使其他模块可以通过将导出函数的函数名称以及该模块的模块名称(通常存储在自定义段中)添加到其他模块包含的导入段中,调用该模块中的导出函数。
(3)函数段和代码段
模块内的函数信息分开存储在函数段和代码段中。函数段存储模块内所有函数对应类型索引,代码段存储模块内所有函数的局部变量信息和字节码。函数段和代码段存储的项目数量一致,且一一对应。
(4)表段和元素段
表段存储模块内定义的所有表,元素段存储表初始化数据。
(5)内存段和数据段
内存段存储模块内定义的所有内存,数据段存储常量和内存初始化数据。
(6)全局段
全局段存储模块内定义的所有全局变量信息。
(7)起始段
起始段存储模块的入口函数索引。
(8)自定义段
自定义段存储自定义信息,包括模块名称、数据段属性等。自定义段还包含namesection字段,该字段中存储函数名、局部变量名等调试信息和第三方扩展信息。
请参考图1,图1是本申请一示例性实施例示出的一种WebAssembly虚拟机的测试方法。
在本实施例中,上述WebAssembly虚拟机的测试方法可以应用于任意一个电子设备。其中,该电子设备可以是具有存储资源(例如:NVM、RAM等)且具有一定的计算能力的设备,例如:包含一台独立的物理主机的服务器、由多台互相独立的物理主机构成的服务器集群、台式计算机、笔记本电脑、掌上电脑(PDAs,Personal Digital Assistants)等,也可以是智能卡、安全元件、物联网设备等资源受限设备。
在实际的应用中,上述电子设备上还可以搭载WebAssembly虚拟机。在由该电子设备上搭载的WebAssembly虚拟机加载WebAssembly程序模块时,具体可以由该WebAssembly虚拟机读取相应的WebAssembly二进制文件,并将该WebAssembly二进制文件解释成机器码;而在由该WebAssembly虚拟机执行WebAssembly的程序模块时,具体可以由该WebAssembly虚拟机执行对相应的WebAssembly二进制文件进行解释得到的机器码。
需要说明的是,WebAssembly虚拟机可以基于软件方式来实现,而NVM和RAM则可以是作为电子设备的组成部分的硬件。
上述WebAssembly虚拟机的测试方法可以包括以下步骤:
步骤101:获取用于测试的WebAssembly二进制文件。
在本实施例中,上述电子设备首先可以获取与用于测试的WebAssembly程序模块对应的WebAssembly二进制文件。
在实际的应用中,WebAssembly程序模块可以包括WebAssembly应用模块、WebAssembly库模块。其中,WebAssembly应用模块可以是通过对基于高级语言编写的应用程序的程序代码进行编译得到的WebAssembly程序模块;WebAssembly库模块可以是通过对基于高级语言编写的程序库的程序代码进行编译得到的WebAssembly程序模块。该程序库中的程序可以作为系统程序的一部分,此时的WebAssembly库模块可以被称为WebAssembly系统库模块。WebAssembly系统库模块的程序代码与虚拟机/解释器的代码(或者操作系统代码)一起编译。
在一个例子中,上述电子设备可以将编译功能分离,由该电子设备之外的其他设备完成编译。在这种情况下,其他设备可以对基于高级语言编写的程序(例如:应用程序、程序库等)的程序代码进行编译,得到WebAssembly二进制文件,并将该WebAssembly二进制文件发送给该电子设备。
在另一个例子中,上述电子设备可以对外提供编译功能,即由该电子设备完成编译。在这种情况下,该电子设备可以对基于高级语言编写的程序(例如:应用程序、程序库等)的程序代码进行编译,得到WebAssembly二进制文件。
除此之外,上述电子设备还可以远程获取WebAssembly二进制文件。例如,可以将基于高级语言编写的程序(例如:应用程序、程序库等)的程序代码进行编译得到的WebAssembly二进制文件存储在远程服务器中,而该电子设备则可以从该远程服务器下载该WebAssembly二进制文件。
需要说明的是,不管是通过编译得到的WebAssembly二进制文件,还是接收到的由其他设备发送的WebAssembly二进制文件,都可以在上述电子设备上搭载的NVM中进行持久化存储,也可以在该电子设备上搭载的RAM中进行暂存,便于后续流程使用。
在一些实施例中,可以由用户(例如:测试人员)基于高级语言编写用于测试的应用程序,而上述电子设备则可以获取该应用程序,并对该应用程序进行编译,得到用于测试的WebAssembly应用模块。此时,该WebAssembly应用模块的呈现形式即为用于测试的WebAssembly二进制文件。
在一些实施例中,在获取用于测试的WebAssembly二进制文件时,具体可以先获取与用于测试的WebAssembly二进制文件对应的存储路径,后续可以基于该存储路径,以二进制方式读取该WebAssembly二进制文件。
具体地,上述电子设备可以对外提供可交互界面,使得用户可以通过该可交互界面输入上述存储路径。该电子设备在获取到由用户输入的该存储路径后,即可基于该存储路径,以二进制方式读取用于测试的WebAssembly二进制文件。
以二进制方式读取二进制文件,意味着以原始的二进制形式来读取二进制文件的内容,而不会将二进制文件的内容按照字符编码(如ASCII或Unicode)进行解析和处理,以将其转换为可读的文本形式。以二进制方式读取二进制文件可以保留二进制文件中的所有字节,包括特殊字符、控制字符以及其他非文本数据。
在一些实施例中,在基于上述存储路径,以二进制方式读取上述WebAssembly二进制文件时,具体可以基于该存储路径,以二进制方式读取该WebAssembly二进制文件,并将读取到的该WebAssembly二进制文件写入至一个内存数组。
内存数组是一种在内存中存储和操作数据的数据结构。它是由一组连续的内存单元组成的,每个内存单元都可以存储一个数据元素,这些数据元素的类型通常是相同的。内存数组可以用于存储和操作多个相关的数据,比如数字、字符串、对象等。内存数组使用一个索引来访问它的数据元素,索引通常是整数类型,表示数据元素在内存数组中的位置。可以通过给定的索引来读取或修改内存数组中的数据元素。
内存数组中的数据元素在内存中是连续存储的,因此访问数据元素时速度非常快,并且可以通过索引来访问任何位置的数据元素。与链表等数据结构不同,内存数组支持随机访问和遍历,这意味着可以按任意顺序访问内存数组中的数据元素,也便于实现搜索、排序和过滤等操作。内存数组能够高效地使用内存空间,并且内存数组无需存储额外的指针或链接字段。内存数组也易于维护和修改。
步骤102:基于WebAssembly虚拟机规范,对所述WebAssembly二进制文件进行解析,以生成与所述WebAssembly二进制文件对应的树状结构;其中,树状结构中的节点包含WebAssembly二进制文件中的单元数据。
在本实施例中,在获取到上述WebAssembly二进制文件的情况下,可以基于WebAssembly虚拟机规范,对该WebAssembly二进制文件进行解析,以生成与该WebAssembly二进制文件对应的树状结构。
对于树状结构而言,一个节点即为一个数据元素。上述树状结构中的一个节点可以包含上述WebAssembly二进制文件中的一个单元数据,即将该WebAssembly二进制文件中的一个单元数据作为一个数据元素。
在实际的应用中,为了便于通过树状结构,确定单元数据在WebAssembly二进制文件中的位置,可以由WebAssembly二进制文件中的一个单元数据和这个单元数据在该WebAssembly二进制文件中的位置共同组成一个数据元素。也即,与该WebAssembly二进制文件对应的树状结构中的一个节点包含该WebAssembly二进制文件中的一个单元数据和这个单元数据在该WebAssembly二进制文件中的位置。
需要说明的是,WebAssembly二进制文件中的单元数据指的是具有独立意义的数据片段,例如:类型段中的函数类型,导入段中的函数名称、模块名称,导出段中的函数名称、函数索引,等等。
虚拟机规范是一种定义了虚拟机的行为和功能的规范。它描述了虚拟机的指令集、内存模型、寄存器、异常处理、类加载、字节码执行等方面的细节。虚拟机规范的主要作用是为不同的编程语言和平台提供一个通用的执行环境。
基于WebAssembly虚拟机规范,对WebAssembly二进制文件进行解析,可以从WebAssembly二进制文件中提取出上述单元数据,并且可以确定提取出的这些单元数据之间的层级关系。其中,层级关系可以包括WebAssembly二进制文件中的11种数据段之间的层级关系,以及各个数据段内的单元数据之间的层级关系。
因此,可以根据从上述WebAssembly二进制文件中提取出的单元数据,以及确定的提取出的这些单元数据之间的层级关系,生成上述树状结构。
如前所述,上述WebAssembly二进制文件可以被写入至上述内存数组。在这种情况下,上述树状结构中的一个节点可以包含该WebAssembly二进制文件中的一个单元数据和这个单元数据在该内存数组中的索引。这样,通过树状结构,不仅可以确定WebAssembly二进制文件中的单元数据,还可以确定各个单元数据在用于存储该WebAssembly二进制文件的内存数组中的索引,从而可以通过索引在该内存数组中快速访问各个单元数据。
步骤103:在可视化界面中,针对所述树状结构进行输出,并响应于用户通过所述可视化界面执行的针对所述树状结构的修改操作,对所述树状结构进行修改,并基于修改后的所述树状结构,对所述WebAssembly二进制文件进行修改。
在本实施例中,在生成了上述树状结构的情况下,可以在上述电子设备面向用户提供的可视化界面中,针对该树状结构进行输出。
与之相应地,用户可以通过上述可视化界面,执行针对上述树状结构的修改操作。而上述电子设备则可以响应于用户通过该可视化界面执行的这些修改操作,对该树状结构进行修改;由于该树状结构中的节点包含上述WebAssembly二进制文件中的单元数据,修改该树状结构也就意味着修改该WebAssembly二进制文件,即可以进一步地基于修改后的该树状结构,对该WebAssembly二进制文件进行修改。
由此,即可面向用户提供针对WebAssembly二进制文件的较为直观的阅读和修改。
如前所述,上述WebAssembly二进制文件可以被写入至上述内存数组。在这种情况下,在对该WebAssembly二进制文件进行修改时,具体可以对该内存数组中存储的所述该WebAssembly二进制文件进行修改。
步骤104:基于修改后的所述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二进制文件中NVM(Non-Volatile Memory,非易失性存储器)数组、DTR(CLEAR_ON_DESELECT RAM,取消清除)数组、RTR(CLEAR_ON_RESET RAM,复位清除)数组的地址长度或者地址偏移,使其超出数组定义的大小,造成数组的越界访问。此时,修改后的该WebAssembly二进制文件包含用于数组越界访问的逻辑漏洞。
在上述技术方案中,可以基于WebAssembly虚拟机规范,对用于测试的WebAssembly二进制文件进行解析,以生成与该WebAssembly二进制文件对应的树状结构,从而可以在可视化界面中,针对该树状结构进行输出,并根据于用户通过该可视化界面执行的针对该树状结构的修改操作,对该WebAssembly二进制文件进行修改,最后可以基于修改后的该WebAssembly二进制文件,对WebAssembly虚拟机进行测试。
采用上述方式,通过在可视化界面中,针对与WebAssembly二进制文件对应的树状结构进行输出,并根据用户通过该可视化界面执行的针对该树状结构的修改操作,对该WebAssembly二进制文件进行修改,可以实现针对WebAssembly二进制文件的较为直观的阅读和修改,从而可以基于修改后的WebAssembly二进制文件,较为容易地实现针对WebAssembly虚拟机的测试,提高针对WebAssembly虚拟机的测试的准确率和效率。
与前述WebAssembly虚拟机的测试方法的实施例相对应,本申请还提供了WebAssembly虚拟机的测试装置的实施例。
请参考图2,图2是本申请一示例性实施例示出的一种设备的结构示意图。在硬件层面,该设备包括处理器201、内部总线202、网络接口203、内存204以及非易失性存储器205,当然还可能包括所需要的其他硬件。本申请一个或多个实施例可以基于软件方式来实现,比如由处理器201从非易失性存储器205中读取对应的计算机程序到内存204中然后运行。当然,除了软件实现方式之外,本申请一个或多个实施例并不排除其他实现方式,比如逻辑器件或者软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑模块,也可以是硬件或者逻辑器件。
请参考图3,图3是本申请一示例性实施例示出的一种WebAssembly虚拟机的测试装置的框图。
上述WebAssembly虚拟机的测试装置可以应用于图2所示的设备,以实现本申请的技术方案。其中,该WebAssembly虚拟机的测试装置可以包括:
第一获取单元301,用于获取用于测试的WebAssembly二进制文件;
解析单元302,用于基于WebAssembly虚拟机规范,对所述WebAssembly二进制文件进行解析,以生成与所述WebAssembly二进制文件对应的树状结构;其中,树状结构中的节点包含WebAssembly二进制文件中的单元数据;
修改单元303,用于在可视化界面中,针对所述树状结构进行输出,并响应于用户通过所述可视化界面执行的针对所述树状结构的修改操作,对所述树状结构进行修改,并基于修改后的所述树状结构,对所述WebAssembly二进制文件进行修改;
测试单元304,用于基于修改后的所述WebAssembly二进制文件,对WebAssembly虚拟机进行测试。
可选地,所述装置还包括:
第二获取单元,用于获取基于高级语言编写的用于测试的应用程序;
编译单元,用于对所述应用程序进行编译,得到所述WebAssembly二进制文件。
可选地,所述第一获取单元301具体用于:
获取与用于测试的WebAssembly二进制文件对应的存储路径;
基于所述存储路径,以二进制方式读取所述WebAssembly二进制文件。
可选地,所述第一获取单元301具体用于:
基于所述存储路径,以二进制方式读取所述WebAssembly二进制文件,并将读取到的所述WebAssembly二进制文件写入至内存数组;
所述对所述WebAssembly二进制文件进行修改,包括:
对所述内存数组中存储的所述WebAssembly二进制文件进行修改。
可选地,所述测试单元304具体用于:
基于修改后的所述WebAssembly二进制文件,对资源受限设备上搭载的WebAssembly虚拟机进行测试。
可选地,所述测试单元304具体用于:
获取所述WebAssembly虚拟机针对修改后的所述WebAssembly二进制文件的执行结果,并基于所述执行结果,确定所述WebAssembly虚拟机是否测试通过。
可选地,修改后的所述WebAssembly二进制文件包含逻辑漏洞;
所述测试单元304具体用于:
确定所述执行结果是否包含与所述逻辑漏洞对应的异常响应,如果是,确定所述WebAssembly虚拟机测试通过。
可选地,所述逻辑漏洞包含以下示出的一种或多种:用于参数或变量的越界访问的逻辑漏洞;用于操作数栈溢出的逻辑漏洞;用于函数索引越界访问的逻辑漏洞;用于内存越界访问的逻辑漏洞;用于函数异常跳转的逻辑漏洞;用于数组越界访问的逻辑漏洞。
对于装置实施例而言,其基本对应于方法实施例,因此相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请的技术方案的目的。
上述实施例阐明的系统、装置、模块或者单元,具体可以由计算机芯片或者实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
在一个典型的配置中,计算机包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或者闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或者技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或者其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或者其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或者其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或者其他磁性存储设备或者任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确存储的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
上述对本申请特定实施例进行了描述。其他实施例在本申请的范围内。在一些情况下,在本申请中记载的动作或者步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
在本申请一个或多个实施例中所使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请一个或多个实施例。单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。术语“和/或”是指并包含一个或多个相关联的存储项目的任何或者所有可能组合。
在本申请一个或多个实施例中所使用的术语“一个实施例”、“一些实施例”、“示例”、“具体示例”或者“一种实施方式”等的描述意指结合该实施例所描述的具体特征或者特点包含于本申请的至少一个实施例中。对这些术语的示意性描述不必须针对相同的实施例。而且,所描述的具体特征或者特点可以在本申请一个或多个实施例中以合适的方式结合。此外,在不相互矛盾的情况下,可以将不同的实施例以及不同实施例中的具体特征或者特点进行结合。
应当理解,尽管在本申请一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或者“当……时”或者“响应于确定”。
以上所述仅为本申请一个或多个实施例的较佳实施例而已,并不用以限制本申请一个或多个实施例,凡在本申请一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请一个或多个实施例保护的范围之内。

Claims (9)

1.一种WebAssembly虚拟机的测试方法,其特征在于,所述方法包括:
获取用于测试的WebAssembly二进制文件;
基于WebAssembly虚拟机规范,对所述WebAssembly二进制文件进行解析,以生成与所述WebAssembly二进制文件对应的树状结构;其中,树状结构中的节点包含WebAssembly二进制文件中的单元数据;所述单元数据为所述WebAssembly二进制文件中的具有独立意义的数据片段;
在可视化界面中,针对所述树状结构进行输出,并响应于用户通过所述可视化界面执行的针对所述树状结构的修改操作,对所述树状结构进行修改,并基于修改后的所述树状结构,对所述WebAssembly二进制文件进行修改;
基于修改后的所述WebAssembly二进制文件,对WebAssembly虚拟机进行测试;其中,修改后的所述WebAssembly二进制文件包含逻辑漏洞;
所述基于修改后的所述WebAssembly二进制文件对WebAssembly虚拟机进行测试,包括:
获取所述WebAssembly虚拟机针对修改后的所述WebAssembly二进制文件的执行结果,并确定所述执行结果是否包含与所述逻辑漏洞对应的异常响应,如果是,确定所述WebAssembly虚拟机测试通过。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
获取基于高级语言编写的用于测试的应用程序;
对所述应用程序进行编译,得到所述WebAssembly二进制文件。
3.根据权利要求1所述的方法,其特征在于,所述获取用于测试的WebAssembly二进制文件,包括:
获取与用于测试的WebAssembly二进制文件对应的存储路径;
基于所述存储路径,以二进制方式读取所述WebAssembly二进制文件。
4.根据权利要求3所述的方法,其特征在于,所述基于所述存储路径,以二进制方式读取所述WebAssembly二进制文件,包括:
基于所述存储路径,以二进制方式读取所述WebAssembly二进制文件,并将读取到的所述WebAssembly二进制文件写入至内存数组;
所述对所述WebAssembly二进制文件进行修改,包括:
对所述内存数组中存储的所述WebAssembly二进制文件进行修改。
5.根据权利要求1所述的方法,其特征在于,所述基于修改后的所述WebAssembly二进制文件对WebAssembly虚拟机进行测试,包括:
基于修改后的所述WebAssembly二进制文件,对资源受限设备上搭载的WebAssembly虚拟机进行测试。
6.根据权利要求1所述的方法,其特征在于,所述逻辑漏洞包含以下示出的一种或多种:用于参数或变量的越界访问的逻辑漏洞;用于操作数栈溢出的逻辑漏洞;用于函数索引越界访问的逻辑漏洞;用于内存越界访问的逻辑漏洞;用于函数异常跳转的逻辑漏洞;用于数组越界访问的逻辑漏洞。
7.一种WebAssembly虚拟机的测试装置,其特征在于,所述装置包括:
获取单元,用于获取用于测试的WebAssembly二进制文件;
解析单元,用于基于WebAssembly虚拟机规范,对所述WebAssembly二进制文件进行解析,以生成与所述WebAssembly二进制文件对应的树状结构;其中,树状结构中的节点包含WebAssembly二进制文件中的单元数据;所述单元数据为所述WebAssembly二进制文件中的具有独立意义的数据片段;
修改单元,用于在可视化界面中,针对所述树状结构进行输出,并响应于用户通过所述可视化界面执行的针对所述树状结构的修改操作,对所述树状结构进行修改,并基于修改后的所述树状结构,对所述WebAssembly二进制文件进行修改;
测试单元,用于基于修改后的所述WebAssembly二进制文件,对WebAssembly虚拟机进行测试;其中,修改后的所述WebAssembly二进制文件包含逻辑漏洞;
所述基于修改后的所述WebAssembly二进制文件对WebAssembly虚拟机进行测试,包括:
获取所述WebAssembly虚拟机针对修改后的所述WebAssembly二进制文件的执行结果,并确定所述执行结果是否包含与所述逻辑漏洞对应的异常响应,如果是,确定所述WebAssembly虚拟机测试通过。
8.一种电子设备,其特征在于,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如权利要求1至6中任一项所述的方法。
9.一种计算机可读存储介质,其特征在于,其上存储有计算机指令,该指令被处理器执行时实现如权利要求1至6中任一项所述的方法。
CN202311203863.4A 2023-09-18 2023-09-18 WebAssembly虚拟机的测试方法和装置 Active CN116955209B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311203863.4A CN116955209B (zh) 2023-09-18 2023-09-18 WebAssembly虚拟机的测试方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311203863.4A CN116955209B (zh) 2023-09-18 2023-09-18 WebAssembly虚拟机的测试方法和装置

Publications (2)

Publication Number Publication Date
CN116955209A CN116955209A (zh) 2023-10-27
CN116955209B true CN116955209B (zh) 2024-02-06

Family

ID=88451452

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311203863.4A Active CN116955209B (zh) 2023-09-18 2023-09-18 WebAssembly虚拟机的测试方法和装置

Country Status (1)

Country Link
CN (1) CN116955209B (zh)

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9483387B1 (en) * 2014-03-17 2016-11-01 Amazon Technologies, Inc. Tree comparison functionality for services
CN106202490A (zh) * 2016-07-19 2016-12-07 浪潮电子信息产业股份有限公司 一种SolrCloud配置文件修改方法、装置及系统
CN111090417A (zh) * 2019-11-14 2020-05-01 杭州中恒电气股份有限公司 二进制文件解析方法、装置、设备及介质
CN112070871A (zh) * 2020-09-02 2020-12-11 山东天兑信息科技有限公司 一种跨平台三维可视化引擎构建系统、方法、终端及储存介质
CN112365944A (zh) * 2020-10-23 2021-02-12 零氪科技(北京)有限公司 一种树状数据节点处理系统、方法、电子设备及存储介质
CN115048623A (zh) * 2022-04-01 2022-09-13 上海任意门科技有限公司 用于加密代码的方法、计算设备和存储介质
CN115150385A (zh) * 2021-03-31 2022-10-04 西安诺瓦星云科技股份有限公司 数据处理方法、装置、系统、终端及服务器
CN115221033A (zh) * 2021-04-16 2022-10-21 腾讯科技(深圳)有限公司 接口协议测试方法、装置、计算机可读介质及电子设备

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9483387B1 (en) * 2014-03-17 2016-11-01 Amazon Technologies, Inc. Tree comparison functionality for services
CN106202490A (zh) * 2016-07-19 2016-12-07 浪潮电子信息产业股份有限公司 一种SolrCloud配置文件修改方法、装置及系统
CN111090417A (zh) * 2019-11-14 2020-05-01 杭州中恒电气股份有限公司 二进制文件解析方法、装置、设备及介质
CN112070871A (zh) * 2020-09-02 2020-12-11 山东天兑信息科技有限公司 一种跨平台三维可视化引擎构建系统、方法、终端及储存介质
CN112365944A (zh) * 2020-10-23 2021-02-12 零氪科技(北京)有限公司 一种树状数据节点处理系统、方法、电子设备及存储介质
CN115150385A (zh) * 2021-03-31 2022-10-04 西安诺瓦星云科技股份有限公司 数据处理方法、装置、系统、终端及服务器
CN115221033A (zh) * 2021-04-16 2022-10-21 腾讯科技(深圳)有限公司 接口协议测试方法、装置、计算机可读介质及电子设备
CN115048623A (zh) * 2022-04-01 2022-09-13 上海任意门科技有限公司 用于加密代码的方法、计算设备和存储介质

Also Published As

Publication number Publication date
CN116955209A (zh) 2023-10-27

Similar Documents

Publication Publication Date Title
CN109976761B (zh) 软件开发工具包的生成方法、装置及终端设备
US20070283331A1 (en) Arbitrary Runtime Function Call Tracing
US9928042B2 (en) Automatic classification of compilers
CN110007920B (zh) 一种获取代码依赖关系的方法、装置及电子设备
CN111324396B (zh) 一种区块链智能合约执行方法、装置及设备
US20070061797A1 (en) Bulk loading system and method
CN109271789B (zh) 恶意进程检测方法、装置、电子设备及存储介质
CN112417461A (zh) 设备固件的模糊测试方法及系统
CN108052327A (zh) 一种内核模块编译、加载方法及装置
CN116680015B (zh) 函数调用方法、装置、电子设备及可读存储介质
US20220107827A1 (en) Applying security mitigation measures for stack corruption exploitation in intermediate code files
CN113961919A (zh) 恶意软件检测方法和装置
CN114138281A (zh) 软件工程的编译方法、装置、设备及介质
CN116700629B (zh) 数据处理方法和装置
EP3147781A1 (en) Wrapper calls identification
CN116680014B (zh) 数据处理方法和装置
US20100242027A1 (en) Identifying groups and subgroups
CN106502707B (zh) 代码生成方法及装置
CN116955209B (zh) WebAssembly虚拟机的测试方法和装置
CN109409037B (zh) 一种数据混淆规则的生成方法、装置及设备
Ozogur et al. Android malware detection in bytecode level using TF-IDF and XGBoost
CN114816816A (zh) 崩溃堆栈信息处理方法、装置、设备及存储介质
CN114691496A (zh) 单元测试方法、装置、计算设备及介质
CN116932149A (zh) 数据处理方法和装置
CN116700840B (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