CN111796865B - 一种字节码文件修改方法、装置、终端设备及介质 - Google Patents
一种字节码文件修改方法、装置、终端设备及介质 Download PDFInfo
- Publication number
- CN111796865B CN111796865B CN202010601722.8A CN202010601722A CN111796865B CN 111796865 B CN111796865 B CN 111796865B CN 202010601722 A CN202010601722 A CN 202010601722A CN 111796865 B CN111796865 B CN 111796865B
- Authority
- CN
- China
- Prior art keywords
- byte code
- annotation information
- code file
- file
- modified
- 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
- 238000002715 modification method Methods 0.000 title description 3
- 238000000034 method Methods 0.000 claims abstract description 61
- 230000004048 modification Effects 0.000 claims description 16
- 238000012986 modification Methods 0.000 claims description 16
- 238000004590 computer program Methods 0.000 claims description 11
- 239000000758 substrate Substances 0.000 claims 1
- 238000010586 diagram Methods 0.000 description 9
- 230000006870 function Effects 0.000 description 8
- 230000003287 optical effect Effects 0.000 description 5
- 238000004891 communication Methods 0.000 description 3
- 238000009434 installation Methods 0.000 description 2
- 239000013307 optical fiber Substances 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000001028 reflection method Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/73—Program documentation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/166—Editing, e.g. inserting or deleting
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- Library & Information Science (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本公开公开了一种字节码文件修改方法、装置、终端设备及介质。所述方法包括:确定指定的注解信息和包括所述注解信息的字节码文件的对应关系;基于所述对应关系,修改包括调用语句的字节码文件得到修改后的字节码文件,所述修改后的字节码文件包括有对应的注解信息。利用该方法,在字节码文件的编译期,通过基于注解信息和包含注解信息的字节码文件的对应关系修改包括调用语句的字节码文件,以得到修改后的字节码文件,能够在运行期正向调用修改后的字节码文件中的注解信息,提升了运行时注解信息的获取效率。
Description
技术领域
本公开实施例涉及计算机技术领域,尤其涉及一种字节码文件修改方法、装置、终端设备及介质。
背景技术
在编译期收集代码中信息一般会使用自定义类注解的方式。但是如果在运行时也要获取到注解中的信息,即注解信息,则只能依赖反射,如要获取类、方法和字段的注解信息,必须通过Java的反射技术来获取Annotation对象。
然而,Java的反射性能时分低下。尤其是在CPU资源不足时,反射方法的调用耗时可达到十毫秒级,严重影响到客户端性能。
发明内容
本公开实施例提供了一种字节码文件修改方法、装置、终端设备及介质,提升了运行时注解信息的获取效率。
第一方面,本公开实施例提供了一种字节码文件修改方法,包括:
确定指定的注解信息和包括所述注解信息的字节码文件的对应关系;
基于所述对应关系,修改包括调用语句的字节码文件得到修改后的字节码文件,所述修改后的字节码文件包括有对应的注解信息。
第二方面,本公开实施例还提供了一种字节码文件修改装置,包括:
确定模块,用于确定指定的注解信息和包括所述注解信息的字节码文件的对应关系;
修改模块,用于基于所述对应关系,修改所述字节码文件中包含有调用语句得到修改后的字节码文件,所述修改后的字节码文件包括有对应的注解信息。
第三方面,本公开实施例还提供了一种终端设备,包括:
一个或多个处理装置;
存储装置,用于存储一个或多个程序;
所述一个或多个程序被所述一个或多个处理装置执行,使得所述一个或多个处理装置实现本公开实施例提供的方法。
第四方面,本公开实施例还提供了一种计算机可读介质,其上存储有计算机程序,该程序被处理装置执行时实现本公开实施例提供的方法。
本公开实施例提供了一种字节码文件修改方法、装置、终端设备及介质,首先确定指定的注解信息和包括所述注解信息的字节码文件的对应关系;然后基于所述对应关系,修改包括调用语句的字节码文件得到修改后的字节码文件,所述修改后的字节码文件包括有对应的注解信息。利用上述技术方案,在字节码文件的编译期,通过基于注解信息和包含注解信息的字节码文件的对应关系修改包括调用语句的字节码文件,以得到修改后的字节码文件,能够在运行期正向调用修改后的字节码文件中的注解信息,提升了运行时注解信息的获取效率。
附图说明
图1为本公开实施例一提供的一种字节码文件修改方法的流程示意图;
图2为本公开实施例二提供的一种字节码文件修改方法的流程示意图;
图2a为本公开实施例二提供的又一种字节码文件修改方法的流程示意图;
图3为本公开实施例三提供的一种字节码文件修改装置的结构示意图;
图4为本公开实施例四提供的一种终端设备的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的实施例。虽然附图中显示了本公开的某些实施例,然而应当理解的是,本公开可以通过各种形式来实现,而且不应该被解释为限于这里阐述的实施例,相反提供这些实施例是为了更加透彻和完整地理解本公开。应当理解的是,本公开的附图及实施例仅用于示例性作用,并非用于限制本公开的保护范围。
应当理解,本公开的方法实施方式中记载的各个步骤可以按照不同的顺序执行,和/或并行执行。此外,方法实施方式可以包括附加的步骤和/或省略执行示出的步骤。本公开的范围在此方面不受限制。
本文使用的术语“包括”及其变形是开放性包括,即“包括但不限于”。术语“基于”是“至少部分地基于”。术语“一个实施例”表示“至少一个实施例”;术语“另一实施例”表示“至少一个另外的实施例”;术语“一些实施例”表示“至少一些实施例”。其他术语的相关定义将在下文描述中给出。
需要注意,本公开中提及的“一个”、“多个”的修饰是示意性而非限制性的,本领域技术人员应当理解,除非在上下文另有明确指出,否则应该理解为“一个或多个”。
本公开实施方式中的多个装置之间所交互的消息或者信息的名称仅用于说明性的目的,而并不是用于对这些消息或信息的范围进行限制。
下述各实施例中,每个实施例中同时提供了可选特征和示例,实施例中记载的各个特征可进行组合,形成多个可选方案,不应将每个编号的实施例仅视为一个技术方案。此外,在不冲突的情况下,本公开中的实施例及实施例中的特征可以相互组合。
实施例一
图1为本公开实施例一提供的一种字节码文件修改方法的流程示意图,该方法可适用于提升注解信息获取效率的情况,该方法可以由字节码文件修改装置来执行,其中该装置可由软件和/或硬件实现,并一般集成在终端设备上,在本实施例中终端设备包括但不限于:电脑。
如图1所示,本公开实施例一提供的一种字节码文件修改方法,包括如下步骤:
S110、确定指定的注解信息和包括所述注解信息的字节码文件的对应关系。
在本实施例中,指定的注解信息可以认为是运行时期所需获取的注解信息。如,在Java运行时期所需获取的注解中的信息。
本公开可以执行在编译时期,确定指定的注解信息和包括注解信息的字节码文件的对应关系。在确定对应关系时,可以遍历可能包括指定注解信息的字节码文件;也可以遍历所有字节码文件,此处不作限定。
本步骤在构建对应关系时,可以基于注解信息和包括所述注解信息的字节码文件的标识信息确定对应关系。标识信息可以唯一标识字节码文件,如字节码文件的名称。
指定的注解信息所包括的内容不作限定,可以基于运行时所需内容确定。
在一个实施例中,所述注解信息包括如下一个或多个:元信息、秘钥和对应的参数。其中元信息又称元数据。注解信息可以包括密钥,即Key和对应的参数。
S120、基于所述对应关系,修改包括调用语句的字节码文件得到修改后的字节码文件,所述修改后的字节码文件包括有对应的注解信息。
调用语句可以认为是调用注解信息的语句。在运行期,可以基于调用语句获取所需的注解信息。
在确定对应关系后,本步骤可以修改编译期的所有包括调用语句的字节码文件得到修改后的字节码文件。此处不限定修改的具体手段,只要修改后的字节码文件包括有对应的注解信息即可,从而在运行期可以直接基于调用语句获取到注解信息,无需通过反射方式获取注解信息,进而提升了注解信息的获取效率。
本公开实施例一提供的一种字节码文件修改方法,首先确定指定的注解信息和包括所述注解信息的字节码文件的对应关系;然后基于所述对应关系,修改包括调用语句的字节码文件得到修改后的字节码文件,所述修改后的字节码文件包括有对应的注解信息。利用上述方法,在字节码文件的编译期,通过基于注解信息和包含注解信息的字节码文件的对应关系修改包括调用语句的字节码文件,以得到修改后的字节码文件,能够在运行期正向调用修改后的字节码文件中的注解信息,提升了运行时注解信息的获取效率。
实施例二
图2为本公开实施例二提供的一种字节码文件修改方法的流程示意图,本实施例二以上述各实施例中各个可选方案为基础进行具体化。在本实施例中,将确定指定的注解信息和包括所述注解信息的字节码文件的对应关系,具体包括:
遍历生成应用程序安装包所需的字节码文件,确定包含指定的注解信息的字节码文件;
构建所述注解信息和对应的字节码文件的对应关系。
进一步地,本实施例还将基于所述对应关系,修改包括调用语句的字节码文件得到修改后的字节码文件,具体包括:基于所述对应关系,修改所述字节码文件中包含调用语句的目标文件的入参和调用语句的签名,得到修改后的字节码文件。
本实施例尚未详尽的内容请参考实施例一。
如图2所示,本公开实施例二提供的一种字节码文件修改方法,包括如下步骤:
S210、遍历生成应用程序安装包所需的字节码文件,确定包含指定的注解信息的字节码文件。
确定指定的注解信息和包含注解信息的字节码文件的对应关系时,本步骤可以首先遍历编译期所有的字节码文件,即生成应用程序安装包所需的字节码文件,以确定包含指定的注解信息的字节码文件。
具体地,本步骤可以基于注解信息查找生成应用程序安装包所需的每个字节码文件,确定包含有注解信息的字节码文件,以便于确定对应关系。
S220、构建所述注解信息和对应的字节码文件的对应关系。
在确定包含指定的注解信息的字节码文件后,本步骤可以构建注解信息和字节码文件的对应关系,以便于修改字节码文件。
构建对应关系时,可以基于注解信息和字节码文件的标识信息构建。
S230、基于所述对应关系,修改所述字节码文件中包含调用语句的目标文件的入参和调用语句的签名,得到修改后的字节码文件。
目标文件可以认为是包含调用语句的字节码文件。调用语句可以认为是fetchAnnInfo的调用语句,用于获取注解信息。
在修改目标文件时,可以修改目标文件的入参和调用语句的签名,以便在运行期获取注解信息时,能够基于修改后的调用语句的签名获取到对应的注解信息。其中,修改的入参中可以新增有对应字节码文件的注解信息。
本公开实施例二提供的一种字节码文件修改方法,具体化了确定对应关系的操作和修改字节码文件的操作。利用该方法,通过遍历生成应用程序所需的字节码文件,进行包含调用语句的目标文件的入参和调用语句的签名的修改,以在应用程序运行期,能够正向调用注解信息,提升了运行期获取注解信息的效率。
在上述实施例的基础上,提出了上述实施例的变型实施例,在此需要说明的是,为了使描述简要,在变型实施例中仅描述与上述实施例的不同之处。
在一个实施例中,所述注解信息和对应的字节码文件的对应关系,由所述注解信息和所对应的字节码文件的名称表示。
在本实施例中,对应关系可以直接由注解信息和包括该注解信息的字节码文件,即所对应的字节码文件的名称表示。直接基于字节码文件的名称,如类名称,表示对应关系,提升了修改字节码文件的效率。
在一个实施例中,所述基于所述对应关系,修改所述字节码文件中包含调用语句的目标文件的入参和调用语句的签名,得到修改后的字节码文件,包括:
遍历所述字节码文件,确定包括调用语句的目标文件;
确定所述目标文件所包括字节码文件的名称对应的注解信息;
将所述注解信息添加至所述目标文件中;
修改所述目标文件所包括调用语句的签名,得到修改后的字节码文件。
本实施例可以首先遍历所有字节码文件,确定包括调用语句的目标文件,在确定目标文件后,可以查找目标文件中所包括的字节码文件的名称,然后基于对应关系确定对应目标文件所包括字节码文件的名称的注解信息,并将查找确定的注解信息添加至目标文件中,以供正向调用。为了便于运行期成功获取到注解信息,本实施例还需修改目标文件所包括调用语句的签名,以便于在获取注解信息时,基于修改后的调用语句的签名获取注解信息。
在一个实施例中,在运行时期,基于修改后的字节码文件所包括的修改后的调用语句的签名,获取所调用的注解信息。
基于修改后的调用语句的签名,能够直接从目标文件中获取所调用的注解信息实现正向调用。
以下对本公开进行示例性的描述,本公开提供的字节码文件修改方法可以认为是一种基于ASM修改的注解信息获取性能优化方法。为了解决Java运行时期获取自定义类注解的反射性能瓶颈问题,本公开通过在编译时期对字节码进行ASM修改来将反射优化为正向调用。经过优化后的注解信息获取可以达到和正向调用同等的效率,相较于反射调用提升10倍以上。
Java中运行时对注解信息的获取是通过Class.getDeclaredAnnotation(Annotation.class)实现的,其内部通过JVM虚拟机反射了对应类的class文件,读取并解析了注解的元信息,这一步是相当耗时的。本公开通过如下编译时流程将注解信息插入到对应的调用处字节码中,提升注解信息获取效率。
图2a为本公开实施例二提供的又一种字节码文件修改方法的流程示意图,参见图2a,假设在运行时获取信息的注解名为ABKey,存储它的信息的数据类名为ABModel。同时提供一个工具方法获取某一个类Class下的ABKey注解信息,返回ABModel。该工具可以通过运行时反射Class.getDeclaredAnnotation(Annotation.class)获取目标类的ABKey注解并赋值给对应的数据类返回。该获取注解信息采用的是运行时反射,效率低下。所以通过如下几个步骤进行优化。
第一步:在Gradle编译流程的Transform阶段,通过JavaAssist遍历所有输入的class文件,即字节码文件,判断其是否存在指定的注解信息。当JavaAssist扫描到某个class文件使用了@ABKey注解之后,就通过编译时反射收集其注解内信息并保存在一个全局HashMap中。然后构建注解信息和包含该注解信息的字节码文件的对应关系。
至此,所有在代码中使用到了@ABKey注解的类就全部被转换成了一个className->注解信息Model的对应关系。这一步未对代码做任何修改,只是收集信息。
第二步:在完成收集注解的扫描阶段后,再次使用ASM框架遍历一次所有生成的类,即字节码文件,这一步实际遍历的是代码中的JVM语句,需要过滤并修改的是调用注解方法的invokeVirtual语句,即上面提到的fetchAnnInfo的调用语句。正常情况下在编译时无法获取某个方法传入的参数(这是由运行时虚拟机决定的),但是调用fetchAnnInfo的字节码语句是先将TargetClass的类名通过LDC入栈以供方法调用,所以可以使用className查询第一步收集的className->注解信息Model的表(即对应关系)获取这个传入类的注解信息。
获取到信息之后需要对原始调用处进行改写,插入获取到的注解参数信息,例如上述TargetClass的注解内容时key="123",percent=0.025。则将原始字节码修改。
本步骤修改了fetchAnnInfo函数的入参以及调用的函数签名,直接调用会报nosuch method error,所以需要在AnnUtil中添加一个三参数方法,三参数可以包括目标类,即字节码文件,注解信息的密钥和对应的参数,以实现正向调用。
经过字节码优化后,在注解信息获取时,执行的是修改后的字节码文件,通过这个方法获取ABModel无需运行时反射,效率大幅提高。
本公开修改字节码文件时可以遍历生成应用程序的所有字节码文件,然后通过LDC语句入栈注解信息以实现包含调用语句的字节码文件的改写。
实施例三
图3为本公开实施例三提供的一种字节码文件修改装置的结构示意图,该装置可适用于提升注解信息获取效率的情况,其中该装置可由软件和/或硬件实现,并一般集成在终端设备上。
如图3所示,该装置包括:
确定模块31,用于确定指定的注解信息和包括所述注解信息的字节码文件的对应关系;
修改模块32,用于基于所述对应关系,修改所述字节码文件中包含有调用语句得到修改后的字节码文件,所述修改后的字节码文件包括有对应的注解信息。
在本实施例中,该装置首先通过确定模块31确定指定的注解信息和包括所述注解信息的字节码文件的对应关系;然后通过修改模块32基于所述对应关系,修改所述字节码文件中包含有调用语句得到修改后的字节码文件,所述修改后的字节码文件包括有对应的注解信息。
本实施例提供了一种字节码文件修改装置,该装置在字节码文件的编译期,通过基于注解信息和包含注解信息的字节码文件的对应关系修改包括调用语句的字节码文件,以得到修改后的字节码文件,能够在运行期正向调用修改后的字节码文件中的注解信息,提升了运行时注解信息的获取效率。
进一步地,确定模块31,具体用于:
遍历生成应用程序安装包所需的字节码文件,确定包含指定的注解信息的字节码文件;
构建所述注解信息和对应的字节码文件的对应关系。
进一步地,所述注解信息和对应的字节码文件的对应关系,由所述注解信息和所对应的字节码文件的名称表示。
进一步地,修改模块32,具体用于:
基于所述对应关系,修改所述字节码文件中包含调用语句的目标文件的入参和调用语句的签名,得到修改后的字节码文件。
进一步地,修改模块32,具体用于:
遍历所述字节码文件,确定包括调用语句的目标文件;
确定所述目标文件所包括字节码文件的名称对应的注解信息;
将所述注解信息添加至所述目标文件中;
修改所述目标文件所包括调用语句的签名,得到修改后的字节码文件。
进一步地,在运行时期,基于修改后的字节码文件所包括的修改后的调用语句的签名,获取所调用的注解信息。
进一步地,所述注解信息包括如下一个或多个:元信息、秘钥和对应的参数。
上述字节码文件修改装置可执行本公开任意实施例所提供的字节码文件修改方法,具备执行方法相应的功能模块和有益效果。
实施例四
图4为本公开实施例四提供的一种终端设备的结构示意图。图4示出了适于用来实现本公开实施例的终端设备400的结构示意图。本公开实施例中的终端设备400可以包括但不限于诸如移动电话、笔记本电脑、数字广播接收器、个人数字助理(Personal DigitalAssistant,PDA)、平板电脑(Portable Android Device,PAD)、便携式多媒体播放器(Portable Media Player,PMP)、车载终端(例如车载导航终端)等等的移动终端以及诸如数字TV、台式计算机等等的固定终端。图4示出的终端设备400仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图4所示,终端设备400可以包括一个或多个处理装置(例如中央处理器、图形处理器等)401,其可以根据存储在只读存储器(ROM)402中的程序或者从存储装置408加载到随机访问存储器(RAM)403中的程序而执行各种适当的动作和处理。一个或多个处理装置401实现如本公开提供的字节码文件修改方法。在RAM403中,还存储有终端设备400操作所需的各种程序和数据。处理装置401、ROM 402以及RAM403通过总线404彼此相连。输入/输出(I/O)接口405也连接至总线404。
通常,以下装置可以连接至I/O接口405:包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置406;包括例如液晶显示器(LCD)、扬声器、振动器等的输出装置407;包括例如磁带、硬盘等的存储装置408,存储装置408用于存储一个或多个程序;以及通信装置409。通信装置409可以允许终端设备400与其他设备进行无线或有线通信以交换数据。虽然图4示出了具有各种装置的终端设备400,但是应理解的是,并不要求实施或具备所有示出的装置。可以替代地实施或具备更多或更少的装置。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信装置409从网络上被下载和安装,或者从存储装置408被安装,或者从ROM402被安装。在该计算机程序被处理装置401执行时,执行本公开实施例的方法中限定的上述功能。
需要说明的是,本公开上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、RF(射频)等等,或者上述的任意合适的组合。
上述计算机可读介质可以是上述终端设备400中所包含的;也可以是单独存在,而未装配入该终端设备400中。
上述计算机可读介质存储有一个或者多个计算机程序,当上述一个或者多个程序被处理装置执行时实现如下方法:确定指定的注解信息和包括所述注解信息的字节码文件的对应关系;基于所述对应关系,修改包括调用语句的字节码文件得到修改后的字节码文件,所述修改后的字节码文件包括有对应的注解信息。
可以以一种或多种程序设计语言或其组合来编写用于执行本公开的操作的计算机程序代码,上述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本公开实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。其中,模块的名称在某种情况下并不构成对该模块本身的限定。
本文中以上描述的功能可以至少部分地由一个或多个硬件逻辑部件来执行。例如,非限制性地,可以使用的示范类型的硬件逻辑部件包括:现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、片上系统(SOC)、复杂可编程逻辑设备(CPLD)等等。
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
根据本公开的一个或多个实施例,示例1提供了一种字节码文件修改方法,包括:
确定指定的注解信息和包括所述注解信息的字节码文件的对应关系;
基于所述对应关系,修改包括调用语句的字节码文件得到修改后的字节码文件,所述修改后的字节码文件包括有对应的注解信息。
根据本公开的一个或多个实施例,示例2根据示例1所述的方法,
所述确定指定的注解信息和包括所述注解信息的字节码文件的对应关系,包括:
遍历生成应用程序安装包所需的字节码文件,确定包含指定的注解信息的字节码文件;
构建所述注解信息和对应的字节码文件的对应关系。
根据本公开的一个或多个实施例,示例3根据示例2所述的方法,所述注解信息和对应的字节码文件的对应关系,由所述注解信息和所对应的字节码文件的名称表示。
根据本公开的一个或多个实施例,示例4根据示例1所述的方法,所述基于所述对应关系,修改包括调用语句的字节码文件得到修改后的字节码文件,包括:
基于所述对应关系,修改所述字节码文件中包含调用语句的目标文件,得到修改后的字节码文件。
根据本公开的一个或多个实施例,示例5根据示例4所述的方法,所述基于所述对应关系,修改所述字节码文件中包含调用语句的目标文件的入参和调用语句的签名,得到修改后的字节码文件,包括:
遍历所述字节码文件,确定包括调用语句的目标文件;
确定所述目标文件所包括字节码文件的名称对应的注解信息;
将所述注解信息添加至所述目标文件中;
修改所述目标文件所包括调用语句的签名,得到修改后的字节码文件。
根据本公开的一个或多个实施例,示例6根据示例5所述的方法,在运行时期,基于修改后的字节码文件所包括的修改后的调用语句的签名,获取所调用的注解信息。
根据本公开的一个或多个实施例,示例7根据示例1-6任一所述的方法,所述注解信息包括如下一个或多个:元信息、秘钥和对应的参数。
根据本公开的一个或多个实施例,示例8提供了一种字节码文件修改装置,包括:
确定模块,用于确定指定的注解信息和包括所述注解信息的字节码文件的对应关系;
修改模块,用于基于所述对应关系,修改所述字节码文件中包含有调用语句得到修改后的字节码文件,所述修改后的字节码文件包括有对应的注解信息。
根据本公开的一个或多个实施例,示例9提供了一种终端设备,包括:
一个或多个处理装置;
存储装置,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理装置执行,使得所述一个或多个处理装置实现如示例1-7中任一所述的方法。
根据本公开的一个或多个实施例,示例10提供了一种计算机可读介质,其上存储有计算机程序,该程序被处理装置执行时实现如示例1-7中任一所述的方法。
以上描述仅为本公开的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本公开中所涉及的公开范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离上述公开构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本公开中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
Claims (8)
1.一种字节码文件修改方法,其特征在于,包括:
确定指定的注解信息和包括所述注解信息的字节码文件的对应关系;
基于所述对应关系,修改包括调用语句的字节码文件得到修改后的字节码文件,所述修改后的字节码文件包括有对应的注解信息;
所述基于所述对应关系,修改包括调用语句的字节码文件得到修改后的字节码文件,包括:
遍历所述字节码文件,确定包括调用语句的目标文件;
确定所述目标文件所包括字节码文件的名称对应的注解信息;
将所述注解信息添加至所述目标文件中;
修改所述目标文件所包括调用语句的签名,得到修改后的字节码文件。
2.根据权利要求1所述的方法,其特征在于,所述确定指定的注解信息和包括所述注解信息的字节码文件的对应关系,包括:
遍历生成应用程序安装包所需的字节码文件,确定包含指定的注解信息的字节码文件;
构建所述注解信息和对应的字节码文件的对应关系。
3.根据权利要求2所述的方法,其特征在于,所述注解信息和对应的字节码文件的对应关系,由所述注解信息和所对应的字节码文件的名称表示。
4.根据权利要求1所述的方法,其特征在于,
在运行时期,基于修改后的字节码文件所包括的修改后的调用语句的签名,获取所调用的注解信息。
5.根据权利要求1-4任一所述的方法,其特征在于,所述注解信息包括如下一个或多个:元信息、秘钥和对应的参数。
6.一种字节码文件修改装置,其特征在于,包括:
确定模块,用于确定指定的注解信息和包括所述注解信息的字节码文件的对应关系;
修改模块,用于基于所述对应关系,修改所述字节码文件中包含有调用语句得到修改后的字节码文件,所述修改后的字节码文件包括有对应的注解信息;
所述修改模块,具体用于:
遍历所述字节码文件,确定包括调用语句的目标文件;
确定所述目标文件所包括字节码文件的名称对应的注解信息;
将所述注解信息添加至所述目标文件中;
修改所述目标文件所包括调用语句的签名,得到修改后的字节码文件。
7.一种终端设备,其特征在于,包括:
一个或多个处理装置;
存储装置,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理装置执行,使得所述一个或多个处理装置实现如权利要求1-5中任一所述的方法。
8.一种计算机可读介质,其上存储有计算机程序,其特征在于,该程序被处理装置执行时实现如权利要求1-5中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010601722.8A CN111796865B (zh) | 2020-06-28 | 2020-06-28 | 一种字节码文件修改方法、装置、终端设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010601722.8A CN111796865B (zh) | 2020-06-28 | 2020-06-28 | 一种字节码文件修改方法、装置、终端设备及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111796865A CN111796865A (zh) | 2020-10-20 |
CN111796865B true CN111796865B (zh) | 2024-04-16 |
Family
ID=72803877
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010601722.8A Active CN111796865B (zh) | 2020-06-28 | 2020-06-28 | 一种字节码文件修改方法、装置、终端设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111796865B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112600803B (zh) * | 2020-12-02 | 2022-07-19 | 上海哔哩哔哩科技有限公司 | Web端数据签名方法、装置及计算机设备 |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6463578B1 (en) * | 1999-11-23 | 2002-10-08 | International Business Machines Corporation | Systems, methods and computer program products for debugging java server page files using compiled java class file modifications |
CN106990955A (zh) * | 2017-03-09 | 2017-07-28 | 武汉斗鱼网络科技有限公司 | 一种对应用程序进行打点的方法和系统 |
CN108628635A (zh) * | 2018-05-07 | 2018-10-09 | 广州视源电子科技股份有限公司 | 获取参数名和局部变量名的方法、装置、设备及存储介质 |
CN109597621A (zh) * | 2018-08-24 | 2019-04-09 | 天津字节跳动科技有限公司 | 封装Dagger的方法、装置、Dagger、解耦方法、装置、设备及介质 |
CN109857444A (zh) * | 2019-01-03 | 2019-06-07 | 上海拉扎斯信息科技有限公司 | 应用程序的更新方法、装置、电子设备和可读存储介质 |
CN109933326A (zh) * | 2017-12-15 | 2019-06-25 | 北京奇虎科技有限公司 | 改写代码的编译方法、装置及相应终端 |
CN110197052A (zh) * | 2019-05-31 | 2019-09-03 | 深圳前海微众银行股份有限公司 | 基于安卓平台的权限申请方法、装置、设备及存储介质 |
CN110245030A (zh) * | 2019-05-29 | 2019-09-17 | 北京字节跳动网络技术有限公司 | 一种数据服务提供方法、装置、介质和电子设备 |
CN110275713A (zh) * | 2019-07-02 | 2019-09-24 | 四川长虹电器股份有限公司 | 一种Java虚拟机后端编译的改进方法 |
CN110609687A (zh) * | 2019-04-12 | 2019-12-24 | 北京字节跳动网络技术有限公司 | 一种编译方法、装置、电子设备和存储介质 |
CN110716715A (zh) * | 2019-10-18 | 2020-01-21 | 恒生电子股份有限公司 | 一种应用程序开发方法、装置、设备及介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111782340B (zh) * | 2020-06-29 | 2023-08-08 | 中国工商银行股份有限公司 | 一种基于字节码的数据处理方法、装置、设备及系统 |
-
2020
- 2020-06-28 CN CN202010601722.8A patent/CN111796865B/zh active Active
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6463578B1 (en) * | 1999-11-23 | 2002-10-08 | International Business Machines Corporation | Systems, methods and computer program products for debugging java server page files using compiled java class file modifications |
CN106990955A (zh) * | 2017-03-09 | 2017-07-28 | 武汉斗鱼网络科技有限公司 | 一种对应用程序进行打点的方法和系统 |
CN109933326A (zh) * | 2017-12-15 | 2019-06-25 | 北京奇虎科技有限公司 | 改写代码的编译方法、装置及相应终端 |
CN108628635A (zh) * | 2018-05-07 | 2018-10-09 | 广州视源电子科技股份有限公司 | 获取参数名和局部变量名的方法、装置、设备及存储介质 |
CN109597621A (zh) * | 2018-08-24 | 2019-04-09 | 天津字节跳动科技有限公司 | 封装Dagger的方法、装置、Dagger、解耦方法、装置、设备及介质 |
CN109857444A (zh) * | 2019-01-03 | 2019-06-07 | 上海拉扎斯信息科技有限公司 | 应用程序的更新方法、装置、电子设备和可读存储介质 |
CN110609687A (zh) * | 2019-04-12 | 2019-12-24 | 北京字节跳动网络技术有限公司 | 一种编译方法、装置、电子设备和存储介质 |
CN110245030A (zh) * | 2019-05-29 | 2019-09-17 | 北京字节跳动网络技术有限公司 | 一种数据服务提供方法、装置、介质和电子设备 |
CN110197052A (zh) * | 2019-05-31 | 2019-09-03 | 深圳前海微众银行股份有限公司 | 基于安卓平台的权限申请方法、装置、设备及存储介质 |
CN110275713A (zh) * | 2019-07-02 | 2019-09-24 | 四川长虹电器股份有限公司 | 一种Java虚拟机后端编译的改进方法 |
CN110716715A (zh) * | 2019-10-18 | 2020-01-21 | 恒生电子股份有限公司 | 一种应用程序开发方法、装置、设备及介质 |
Non-Patent Citations (1)
Title |
---|
基于动态字节码注入的Android沙盒模型;梁丹;《中国优秀硕士学位论文全文数据库 信息科技辑》(第03期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN111796865A (zh) | 2020-10-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110764748B (zh) | 代码调用方法、装置、终端及存储介质 | |
CN111581555B (zh) | 一种文档加载方法、装置、设备及存储介质 | |
CN112214408B (zh) | 依赖冲突检测方法、装置、电子设备及计算机可读介质 | |
CN110609687A (zh) | 一种编译方法、装置、电子设备和存储介质 | |
CN111309304B (zh) | 一种生成idl文件的方法、装置、介质和电子设备 | |
CN110221840B (zh) | 应用程序的功能实现方法及装置、设备及存储介质 | |
CN113407165B (zh) | Sdk的生成和自升级方法、装置、可读介质和设备 | |
CN111796865B (zh) | 一种字节码文件修改方法、装置、终端设备及介质 | |
CN112416303B (zh) | 软件开发工具包热修复方法、装置及电子设备 | |
CN111506904B (zh) | 漏洞在线修复的方法和装置 | |
CN113391860B (zh) | 服务请求处理方法、装置、电子设备及计算机存储介质 | |
CN111414152B (zh) | 业务逻辑的实现方法、系统、可读介质和电子设备 | |
CN112527302B (zh) | 错误检测的方法及装置、终端和存储介质 | |
CN110704050B (zh) | 模块初始化方法、装置、电子设备及计算机可读存储介质 | |
CN111752644A (zh) | 接口模拟方法、装置、设备及存储介质 | |
CN111399902B (zh) | 客户端源文件处理方法、装置、可读介质与电子设备 | |
CN111309323B (zh) | 参数初始化方法、装置和电子设备 | |
CN111258786B (zh) | 分层架构中的解耦方法、装置、终端和存储介质 | |
CN112068814A (zh) | 可执行文件的生成方法、装置、系统及介质 | |
CN111562913B (zh) | 视图组件的预创建方法、装置、设备及计算机可读介质 | |
CN113448550B (zh) | 实现类的收集管理方法、装置、电子设备及计算机介质 | |
WO2023103868A1 (zh) | 一种基于Hilt实现依赖注入的方法、装置及设备 | |
CN112015394B (zh) | 安卓功能模块开发方法和装置、计算机系统和存储介质 | |
CN112688863B (zh) | 网关数据处理方法、装置及电子设备 | |
CN116009951A (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 |