CN110795358B - 代码插桩检测方法、装置、设备及介质 - Google Patents
代码插桩检测方法、装置、设备及介质 Download PDFInfo
- Publication number
- CN110795358B CN110795358B CN202010008042.5A CN202010008042A CN110795358B CN 110795358 B CN110795358 B CN 110795358B CN 202010008042 A CN202010008042 A CN 202010008042A CN 110795358 B CN110795358 B CN 110795358B
- Authority
- CN
- China
- Prior art keywords
- instruction length
- function instruction
- dex file
- function
- apk
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3644—Software debugging by instrumenting at runtime
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3624—Software debugging by performing operations on the source code, e.g. via a compiler
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
Abstract
本发明公开了一种代码插桩检测方法,涉及程序分析技术领域,旨在通过比对运行前后的函数指令长度,完成代码插桩检测,该方法包含以下步骤:获取APK中的DEX文件,解析所述DEX文件,得到所述DEX文件的原始函数指令长度;运行所述APK,获取所述DEX文件的内存地址;获取函数偏移值,根据所述DEX文件的内存地址和所述函数偏移值,得到目标函数指令长度;比对所述原始函数指令长度和所述目标函数指令长度,输出插桩检测结果。本发明还公开了一种代码插桩检测装置、电子设备和计算机存储介质。
Description
技术领域
本发明涉及程序分析技术领域,尤其涉及一种代码插桩检测方法、装置、设备及介质。
背景技术
随着移动互联网的发展,智能手机的安全问题成为移动互联网行业以及 移动互联网用户最为重视的问题之一,其中随着Android系统设备的增加,Android应用的安全问题尤为被重视。
在Android应用开发完成后,其交互流程是保密的,如果Android应用在接入用户阶段被插桩,那么应用程序的交互过程就会被用户拦截,导致Android应用的大部分业务逻辑暴露给用户,从而带来安全风险。常见的插桩操作如下:
1. 在网络请求部分插桩,以获取Android应用的传输信息。
2. 在文件操作部分插桩,以获取Android应用中所有的读写文件,甚至读写内容。
3. 在加密代码部分插桩,以获取加密解密数据。
4. 在数据格式转换部分插桩,以获取业务数据。
除上述四种插桩操作之外,Android应用中可插桩的位置非常多,而插桩位置越多,带来的安全威胁就越大。因此亟需一种检测代码插桩的方法来克服插桩带来的安全隐患。但是现有的代码插桩检测方法依赖于大量的人工分析,工作量大,且存在误差。
发明内容
为了克服现有技术的不足,本发明的目的之一在于提供一种代码插桩检测方法,旨在通过比对APK运行前后的函数长度,实现代码插桩检测。
本发明的目的之一采用以下技术方案实现:
一种代码插桩检测方法,包括以下步骤:
获取APK中的DEX文件,解析所述DEX文件,得到所述DEX文件的原始函数指令长度;
运行所述APK,获取所述DEX文件的内存地址;
获取函数偏移值,根据所述DEX文件的内存地址和所述函数偏移值,得到目标函数指令长度;
比对所述原始函数指令长度和所述目标函数指令长度,输出插桩检测结果。
进一步地,通过预先设置的脚本解析所述DEX文件,得到所述DEX文件的原始函数指令长度。
进一步地,运行所述APK,具体为:将所述原始函数指令长度写入所述APK,然后运行所述APK。
进一步地,获取函数偏移值,具体为:从不同版本的Android系统源码中获取函数偏移值,所述函数偏移值为相应函数对应的结构体成员变量的偏移值。
进一步地,根据所述DEX文件的内存地址和所述函数偏移值,得到目标函数指令长度,具体为:将所述DEX文件的内存地址加上所述函数偏移值,得到函数指令长度指针,通过函数指令长度指针获取目标函数指令长度。
进一步地,比对所述原始函数指令长度和所述目标函数指令长度,输出插桩检测结果,具体包括:
若所述原始函数指令长度与所述目标函数指令长度一致,则未被插桩,输出未被插桩的检测结果;
反之,则已被插桩,输出已被插桩的检测结果。
本发明的目的之二在于提供一种代码插桩检测装置,其通过获取APK运行前和运行后的函数指令长度去判断代码是否被插桩,从而完成对代码插桩的检测。
本发明的目的之二采用以下技术方案实现:
DEX解析模块,用于获取APK中的DEX文件,解析所述DEX文件,得到所述DEX文件的原始函数指令长度;
内存地址获取模块,用于运行所述APK,获取所述DEX文件的内存地址;
函数长度计算模块,用于获取函数偏移值,根据所述DEX文件的内存地址和所述函数偏移值,得到目标函数指令长度;
比对输出模块,用于比对所述原始函数指令长度和所述目标函数指令长度,输出插桩检测结果。
本发明的目的之三在于提供执行发明目的之一的电子设备,其包括处理器、存储介质以及计算机程序,所述计算机程序存储于存储介质中,所述计算机程序被处理器执行时实现上述的代码插桩检测方法。
本发明的目的之四在于提供存储发明目的之一的计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述的代码插桩检测方法。
相比现有技术,本发明的有益效果在于:
通过脚本自动化完成解析DEX文件和APK再次编译过程,无需大量人工分析,通过比对APK运行前的函数指令长度和APK运行后的函数指令长度,实现代码插桩检测,适用于任意一个Android应用程序的检测。
附图说明
图1是本发明代码插桩检测方法的流程图;
图2是实施例2的代码插桩检测装置的结构框图;
图3是实施例3的电子设备的结构框图。
具体实施方式
以下将结合附图,对本发明进行更为详细的描述,需要说明的是,以下参照附图对本发明进行的描述仅是示意性的,而非限制性的。各个不同实施例之间可以进行相互组合,以构成未在以下描述中示出的其他实施例。
实施例1
本实施例提供了一种代码插桩检测方法,旨对APK中的DEX文件进行解析,得到DEX文件中的函数指令长度,运行APK之后,再次获取DEX文件中的函数指令长度,通过对比函数指令长度,判断代码是否被插桩,从而实现代码插桩检测。
根据上述原理,对代码插桩检测方法进行介绍,如图1所示,代码插桩检测方法,具体包括以下步骤:
获取APK中的DEX文件,解析所述DEX文件,得到所述DEX文件的原始函数指令长度;
运行所述APK,获取所述DEX文件的内存地址;
获取函数偏移值,根据所述DEX文件的内存地址和所述函数偏移值,得到目标函数指令长度;
比对所述原始函数指令长度和所述目标函数指令长度,输出插桩检测结果。
优选地,运行所述APK,具体为:将所述原始函数指令长度写入所述APK(再次编译所述APK),然后运行所述APK。
上述原始函数指令长度为APK运行前的函数指令长度,其中DEX文件为APK中的JAVA类集合,包含APK的所有函数,因此解析DEX文件,可以得到APK中的所有函数,即被编译的代码。
获取APK的DEX文件之前,在源代码中加入检测代码,然后编译打包得到所述APK,获取所述APK的DEX文件进行解析,得到原始函数指令长度,然后将原始函数指令长度写入所述DEX文件中,通过编译打包得到待运行的APK。本发明通过编译两次完成APK的打包,以获取原始函数指令长度。
APK为Android应用程序包,用户接入SDK后,对SDK进行代码编译,在代码编译期间,用户可以对SDK(Android应用程序开发包)进行插桩操作,以获取Andriod应用程序的代码逻辑。通过编译后的Android应用程序(包含代码)被打包为APK,APK内部包含DEX文件。在APK运行期间,DEX文件会被Dalvik或者ART虚拟机加载运行,使得DEX文件中的函数信息(其中一个数据结构)会发生改变,因此通过动态查找DEX文件在内存中的地址,再将DEX文件在内存中的地址加上函数偏移值,以得到内存中的函数指令长度指针,从而根据该指令长度指针得到内存中的函数指令长度,即上述目标函数指令长度。通过比对原始函数指令长度与目标函数指令长度来判断代码是否被插桩。
若本实施例所述的DEX文件被Dalvik虚拟机加载运行时,通过Hook函数openDexFile获取DEX文件的内存地址,该函数的返回值即为DEX文件的内存地址。
若本实施例所述的DEX文件被ART虚拟机加载运行时,通过Hook函数OpenMemory获取DEX文件的内存地址,该函数的第一个参数即为DEX文件的内存地址。
上述原始函数指令长度和目标函数指令长度为相同函数的指令长度,且均为Andriod应用程序开发包中的通用函数。
优选地,通过预先设置的脚本获取并解析所述DEX文件,得到所述DEX文件的原始函数指令长度。
在本实施例中,所述预先设置的脚本通过Python编写,用于计算函数指令长度,具有通用性。获取APK中的DEX文件之前需要将编译好的APK进行解压。
在本实施例中,使用脚本自动将DEX文件再次编译,不需要手动操作,流程更简化,操作更方便。
优选地,获取函数偏移值,具体为:从不同版本Android系统的源码中获取函数偏移值,本实施例从Android2.2版本至Android1.0版本的源码中获取函数偏移值,该函数偏移值即为每个Android版本对应的函数结构体或C++成员变量相对于结构体指针的偏移量,通过偏移量即可定位DexCode结构体。APK运行在不同的Android版本运行时,因每个版本的ArtMethod的C++类是变化的,其偏移量在不同Android版本中是不同的,因此从官方源码中获取不同Android版本的函数偏移值,在本实施例中,将不同Android版本对应的函数偏移值保存在数据库中以供获取。
当APK中的JAVA函数在程序运行期间,会对应一个结构体或者C++类。当APK被不同的虚拟机运行时,其对应的结构体或者C++类不同,具体分为以下两种情况:
1)在Dalvik虚拟机运行,Dalvik虚拟机中的JAVA函数对应的结构体是structMethod,这个机构体包含methodIndex,methodIndex数值对应的是DEX文件中的MethodIDS结构体,根据MethodIDS结构体里的class索引找到DexClassDef,然后再通过对比JAVA函数的名称,找到对应的DexCode对象,该DexCode对象对应DexCode结构体,该DexCode结构体中的insns_size对应的就是函数指令长度。
2) 在ART虚拟机运行,ART虚拟机中JAVA函数对应的是 ArtMethod的C++类,这个类上有methodIndex,methodIndex数值对应的是DEX文件中的MethodIDS结构体,根据MethodIDS结构体里的class索引找到DexClassDef,然后再通过对比JAVA函数的名称,找到对应的DexCode对象,该DexCode对象对应的是DexCode结构体,DexCode结构体中的insns_size对应的就是函数指令长度。
因此上述函数偏移值即为DexCode结构体的insns_size的偏移量。
当然,随着Android版本的发展,可以在更高版本的Android系统中运行APK,为了获取准确的函数偏移值,数据库中存储的函数偏移值将随着Android版本的升级同步更新,从而保证函数偏移值的通用性。
优选地,根据所述DEX文件的内存地址和所述函数偏移值,得到目标函数指令长度,具体为:将所述DEX文件的内存地址加上所述函数偏移值得到函数指令长度指针,该函数指令长度指针指向存储函数指令长度的内存地址,通过该函数指令长度指针获取目标函数指令长度。
优选地,比对所述原始函数指令长度和所述目标函数指令长度,输出插桩检测结果,具体包括:
若所述原始函数指令长度与所述目标函数指令长度一致,则未被插桩,输出未被插桩的检测结果;
反之,则已被插桩,输出已被插桩的检测结果。
优选地,所述原始函数指令长度和所述目标函数指令长度均为函数代码长度,通过比对同一函数的运行前后的代码长度,能发现代码是被插桩(插入新代码)。
实施例2
本实施例公开了一种对应实施例1的代码插桩检测方法的代码插桩检测装置,为虚拟结构装置,如图2所示,包括:
DEX解析模块210,用于获取APK中的DEX文件,解析所述DEX文件,得到所述DEX文件的原始函数指令长度;
内存地址获取模块220,用于运行所述APK,获取所述DEX文件的内存地址;
函数长度计算模块230,用于获取函数偏移值,根据所述DEX文件的内存地址和所述函数偏移值,得到目标函数指令长度;
比对输出模块240,用于比对所述原始函数指令长度和所述目标函数指令长度,输出插桩检测结果。
上述DEX解析模块210调用预先设置的Python脚本对DEX文件进行解析,并获取DEX文件中的原始函数指令长度。
内存地址获取模块220将DEX解析模块210中得到的原始函数指令长度再次写入所述APK ,然后运行所述APK,以获取DEX文件的内存地址。
函数长度计算模块230从数据库中获取相应的函数偏移值,该函数偏移值通过查找不同Android版本的官方源码得到,将从官方源码查找到的各Android版本的函数偏移值保存在数据库,以供函数长度计算模块230根据Android版本的不同去获取不同的函数偏移值,更加灵活适用。根据所述DEX文件的内存地址和所述函数偏移值,得到目标函数指令长度,具体为:
将所述DEX文件的内存地址加上所述函数偏移值形成函数内存地址,从所述函数内存地址中获取目标函数指令长度。
在比对输出模块240中,根据函数指令长度比对结果,输出相应的插桩检测结果,具体为:
若比对结果为长度一致,则未被插桩,输出未被插桩的检测结果;
反之,则已被插桩,输出已被插桩的检测结果。
实施例3
图3为本发明实施例3提供的一种电子设备的结构示意图,如图3所示,该电子设备包括处理器310、存储器320、输入装置330和输出装置340;计算机设备中处理器310的数量可以是一个或多个,图3中以一个处理器310为例;电子设备中的处理器310、存储器320、输入装置330和输出装置340可以通过总线或其他方式连接,图3中以通过总线连接为例。
存储器320作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的代码插桩检测方法对应的程序指令/模块(例如,代码插桩检测装置中的DEX解析模块210、内存地址获取模块220、函数长度计算模块230和比对输出模块240)。处理器310通过运行存储在存储器320中的软件程序、指令以及模块,从而执行电子设备的各种功能应用以及数据处理,即实现实施例1的代码插桩检测方法。
存储器320可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储器320可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器320可进一步包括相对于处理器310远程设置的存储器,这些远程存储器可以通过网络连接至电子设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
输入装置330可用于接收DEX文件、函数偏移值等。输出装置340用于输出插桩检测结果。
实施例4
本发明实施例4还提供一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于实现代码插桩检测方法,该方法包括:
获取APK中的DEX文件,解析所述DEX文件,得到所述DEX文件的原始函数指令长度;
运行所述APK,获取所述DEX文件的内存地址;
获取函数偏移值,根据所述DEX文件的内存地址和所述函数偏移值,得到目标函数指令长度;
比对所述原始函数指令长度和所述目标函数指令长度,输出插桩检测结果。
当然,本发明实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的方法操作,还可以执行本发明任意实施例所提供的代码插桩检测方法中的相关操作。
通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(Read-Only Memory, ROM)、随机存取存储器(RandomAccess Memory, RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台电子设备(可以是手机,个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
值得注意的是,上述代码插桩检测方法或装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
对本领域的技术人员来说,可根据以上描述的技术方案以及构思,做出其它各种相应的改变以及形变,而所有的这些改变以及形变都应该属于本发明权利要求的保护范围之内。
Claims (6)
1.一种代码插桩检测方法,其特征在于,包括以下步骤:
获取APK中的DEX文件,解析所述DEX文件,得到所述DEX文件的原始函数指令长度;
运行所述APK,获取所述DEX文件的内存地址;
从不同版本的Android系统源码中获取函数偏移值,所述函数偏移值为相应函数对应的结构体成员变量的偏移值;
将所述DEX文件的内存地址加上所述函数偏移值,得到函数指令长度指针,通过函数指令长度指针获取目标函数指令长度;
比对所述原始函数指令长度和所述目标函数指令长度,若所述原始函数指令长度与所述目标函数指令长度一致,则未被插桩,输出未被插桩的检测结果;反之,则已被插桩,输出已被插桩的检测结果。
2.如权利要求1所述的代码插桩检测方法,其特征在于,通过预先设置的脚本解析所述DEX文件,得到所述DEX文件的原始函数指令长度。
3.如权利要求2所述的代码插桩检测方法,其特征在于,运行所述APK,具体为:将所述原始函数指令长度写入所述APK,然后运行所述APK。
4.一种代码插桩检测装置,其特征在于,包括:
DEX解析模块,用于获取APK中的DEX文件,解析所述DEX文件,得到所述DEX文件的原始函数指令长度;
内存地址获取模块,用于运行所述APK,获取所述DEX文件的内存地址;
函数长度计算模块,用于从不同版本的Android系统源码中获取函数偏移值,所述函数偏移值为相应函数对应的结构体成员变量的偏移值;将所述DEX文件的内存地址加上所述函数偏移值,得到函数指令长度指针,通过函数指令长度指针获取目标函数指令长度;
比对输出模块,用于比对所述原始函数指令长度和所述目标函数指令长度,若所述原始函数指令长度与所述目标函数指令长度一致,则未被插桩,输出未被插桩的检测结果;反之,则已被插桩,输出已被插桩的检测结果。
5.一种电子设备,其包括处理器、存储介质以及计算机程序,所述计算机程序存储于存储介质中,其特征在于,所述计算机程序被处理器执行时实现权利要求1至3任一项所述的代码插桩检测方法。
6.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至3任一项所述的代码插桩检测方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010008042.5A CN110795358B (zh) | 2020-01-06 | 2020-01-06 | 代码插桩检测方法、装置、设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010008042.5A CN110795358B (zh) | 2020-01-06 | 2020-01-06 | 代码插桩检测方法、装置、设备及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110795358A CN110795358A (zh) | 2020-02-14 |
CN110795358B true CN110795358B (zh) | 2020-04-07 |
Family
ID=69448547
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010008042.5A Active CN110795358B (zh) | 2020-01-06 | 2020-01-06 | 代码插桩检测方法、装置、设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110795358B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113076233B (zh) * | 2021-03-30 | 2024-02-27 | 中国建设银行股份有限公司 | 一种io性能检测方法、装置、设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104834859A (zh) * | 2015-04-24 | 2015-08-12 | 南京邮电大学 | 一种Android应用中恶意行为的动态检测方法 |
CN108537010A (zh) * | 2018-03-14 | 2018-09-14 | 广东能龙教育股份有限公司 | 一种基于AES算法的Android应用程序Native层壳加密方法 |
CN109145603A (zh) * | 2018-07-09 | 2019-01-04 | 四川大学 | 一种基于信息流的Android隐私泄露行为检测方法和技术 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8479295B2 (en) * | 2011-03-30 | 2013-07-02 | Intel Corporation | Method and apparatus for transparently instrumenting an application program |
-
2020
- 2020-01-06 CN CN202010008042.5A patent/CN110795358B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104834859A (zh) * | 2015-04-24 | 2015-08-12 | 南京邮电大学 | 一种Android应用中恶意行为的动态检测方法 |
CN108537010A (zh) * | 2018-03-14 | 2018-09-14 | 广东能龙教育股份有限公司 | 一种基于AES算法的Android应用程序Native层壳加密方法 |
CN109145603A (zh) * | 2018-07-09 | 2019-01-04 | 四川大学 | 一种基于信息流的Android隐私泄露行为检测方法和技术 |
Also Published As
Publication number | Publication date |
---|---|
CN110795358A (zh) | 2020-02-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11151018B2 (en) | Method and apparatus for testing a code file | |
CN109976761B (zh) | 软件开发工具包的生成方法、装置及终端设备 | |
US9274923B2 (en) | System and method for stack crawl testing and caching | |
US7587612B2 (en) | Generating and communicating information on locations of program sections in memory | |
CN107451474B (zh) | 用于终端的软件漏洞修复方法和装置 | |
US10725893B2 (en) | System and method for determination of code coverage for software applications in a network environment | |
CN111913878B (zh) | 基于程序分析结果的字节码插桩方法、装置及存储介质 | |
CN113568839A (zh) | 软件测试和统计测试覆盖率的方法、装置、设备及介质 | |
CN112419057A (zh) | 智能合约的日志生成及保存方法、装置、设备和存储介质 | |
CN110795358B (zh) | 代码插桩检测方法、装置、设备及介质 | |
CN111427782A (zh) | 安卓动态链接库的运行方法、装置、设备及存储介质 | |
US9329845B2 (en) | Determining target types for generic pointers in source code | |
Seo et al. | A profiling method by PCB hooking and its application for memory fault detection in embedded system operational test | |
US11599342B2 (en) | Pathname independent probing of binaries | |
CN111782239B (zh) | 软件打包和源码版本信息获取方法、装置及存储介质 | |
CN112445706A (zh) | 程序异常代码获取方法、装置、电子设备以及存储介质 | |
CN112445490A (zh) | 文件序列处理方法、装置、终端设备及存储介质 | |
CN111625225A (zh) | 一种程序指定数据输出方法和装置 | |
CN108614704B (zh) | 代码编译方法及装置 | |
CN113467815A (zh) | 热更新的应用修复方法、装置、终端设备及存储介质 | |
CN114356779A (zh) | 编程语言调试方法、装置及终端设备 | |
CN113806231A (zh) | 一种代码覆盖率分析方法、装置、设备和介质 | |
CN112114870A (zh) | 一种打包代码的方法、装置、终端设备和存储介质 | |
Mohsin | WGSLsmith: a random generator of WebGPU shader programs | |
CN108345461B (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 | ||
TR01 | Transfer of patent right |
Effective date of registration: 20210918 Address after: Room 209, building 18, No. 998, Wenyi West Road, Wuchang Street, Yuhang District, Hangzhou City, Zhejiang Province Patentee after: TONGDUN TECHNOLOGY Co.,Ltd. Address before: 311121 room 208, building 18, No. 998, Wenyi West Road, Wuchang Street, Yuhang District, Hangzhou City, Zhejiang Province Patentee before: TONGDUN HOLDINGS Co.,Ltd. |
|
TR01 | Transfer of patent right |