CN114416530A - 字节码修改方法、装置、计算机设备和存储介质 - Google Patents

字节码修改方法、装置、计算机设备和存储介质 Download PDF

Info

Publication number
CN114416530A
CN114416530A CN202111591489.0A CN202111591489A CN114416530A CN 114416530 A CN114416530 A CN 114416530A CN 202111591489 A CN202111591489 A CN 202111591489A CN 114416530 A CN114416530 A CN 114416530A
Authority
CN
China
Prior art keywords
class
modified
requirement
service logic
bytecode
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.)
Pending
Application number
CN202111591489.0A
Other languages
English (en)
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.)
Kingdee Medical Software Technology Co ltd
Original Assignee
Kingdee Medical Software Technology 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 Kingdee Medical Software Technology Co ltd filed Critical Kingdee Medical Software Technology Co ltd
Priority to CN202111591489.0A priority Critical patent/CN114416530A/zh
Publication of CN114416530A publication Critical patent/CN114416530A/zh
Pending legal-status Critical Current

Links

Images

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/362Software debugging
    • G06F11/3628Software debugging of optimised code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3664Environments for testing or debugging software

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)
  • Stored Programmes (AREA)

Abstract

本申请涉及一种字节码修改方法、装置、计算机设备和存储介质。方法包括:获取候选业务逻辑类集合,候选业务逻辑类集合包括修改函数与至少一个候选业务逻辑类,候选业务逻辑类对应于候选业务需求;加载待修改字节码,待修改字节码包括初始业务逻辑类,初始业务逻辑类对应于初始业务需求,初始业务需求的维度包括缺失日志的修复需求维度与待修改字节码的测试需求维度中的至少一种;基于初始业务需求维度,确定候选业务需求中的目标业务需求,基于目标业务需求,确定候选业务逻辑类集合中的目标业务逻辑类;将修改函数实例化,基于实例化的修改函数将初始业务逻辑类的字节码替换为目标业务逻辑类的字节码。采用本方法能够提供一定安全性的保障。

Description

字节码修改方法、装置、计算机设备和存储介质
技术领域
本申请涉及程序修改技术领域,特别是涉及一种字节码修改方法、装置、计算机设备、存储介质和计算机程序产品。
背景技术
传统技术中,研发人员每次都要修改服务的代码,来实现测试人员和运维人员的需求,而且使用的基本是硬编码或静态切面维度的方式。静态切面技术方案有很大的局限性,因为Spring AOP只能通过代码写死切入点和逻辑,实现切面功能,代码侵入性很大。因为Java代码要通过编译成字节码以后,才能在JVM中运行,编译之后SpringAOP就不能改变相关逻辑,不能实现动态切面的需求。这样的方案对于研发、测试、运维的效率都有着很大的影响,而且每次对服务代码的修改,都意味着风险的增加。
发明内容
基于此,有必要针对上述技术问题,提供一种能够多维度进行的字节码修改方法、装置、计算机设备、计算机可读存储介质和计算机程序产品。
第一方面,本申请提供了一种字节码修改方法,所述方法包括:
获取候选业务逻辑类集合,所述候选业务逻辑类集合包括修改函数与至少一个候选业务逻辑类,所述候选业务逻辑类对应于候选业务需求;
加载待修改字节码,所述待修改字节码包括初始业务逻辑类,所述初始业务逻辑类对应于初始业务需求,初始业务需求的维度包括缺失日志的修复需求维度与待修改字节码的测试需求维度中的至少一种;
基于所述初始业务需求中的维度,确定所述候选业务需求中的目标业务需求,基于所述目标业务需求,确定所述候选业务逻辑类集合中的目标业务逻辑类;
将所述修改函数实例化,基于实例化的所述修改函数将包括所述初始业务逻辑类的待修改字节码替换为包括所述目标业务逻辑类的字节码。
在其中一个实施例中,所述修改函数包括业务逻辑类的路径确定类及属性修改类,所述获取候选业务逻辑类集合包括:
按照业务需求,基于所述属性修改类生成所述候选业务逻辑类,所述候选业务逻辑类包括用于替换的属性、函数及字节码文件中的一个或多个;
所述方法还包括:
基于所述路径确定类,确定所述初始业务逻辑类的路径信息,基于所述路径信息确定所述初始业务逻辑类中的待修改数据,所述待修改数据包括待修改的属性、函数及字节码文件中的一个或多个;
其中,所述候选业务逻辑类用于对所述初始业务逻辑类中的待修改数据进行替换。
在其中一个实施例中,所述候选业务逻辑类集合包括预设业务逻辑类集合,所述获取候选业务逻辑类集合,包括:
在加载所述待修改字节码之前,获取预设业务逻辑数据包;
从所述预设业务逻辑数据包中,加载所述预设业务逻辑类集合,所述预设业务逻辑类集合包括对应于预设业务方法类字节码的预设业务方法类;
所述基于实例化的所述修改函数将包括所述初始业务逻辑类的待修改字节码替换为包括所述目标业务逻辑类的字节码,包括:
基于实例化的所述修改函数将包括所述初始业务逻辑类的待修改字节码替换为包括所述目标业务逻辑类的字节码。
在其中一个实施例中,所述预设业务逻辑数据包的生成,包括:
确定代理类文件,所述代理类文件用于修改所述初始业务逻辑类;
获取用于测试的虚拟接口,基于所述虚拟接口生成虚拟接口类文件;
对所述代理类文件与所述虚拟接口类文件进行组合,对组合后的文件进行编译,得到所述预设业务逻辑数据包。
在其中一个实施例中,所述代理类文件的生成,包括:
确定代理类文件的清单文件,所述清单文件用于定义所述代理类文件的修改权限;
确定代理类文件的修改类,所述修改类包括所述代理类文件的修改函数;其中,实例化的所述修改函数用于将所述初始业务逻辑类字节码替换为所述目标业务逻辑类字节码;
组合所述清单文件与所述修改类,生成所述代理类文件。
在其中一个实施例中,所述方法,还包括:
若所述初始业务需求的维度为日志缺失,则将代理类程序中的日志添加到所述待修改字节码中;
若所述初始业务需求的维度为程序测试,则应用代理类程序中的虚拟接口替换待测试程序中的第三方地址,将替换接口的所述待测试程序作为所述待修改字节码。
在其中一个实施例中,初始业务需求的维度还包括待修改数据维度,所述待修改数据维度包括待修改元数据及所述待修改元数据的数据类型,所述方法还包括:
在加载待修改字节码前,获取所述待修改字节码对应的待修改数据维度;
所述基于所述初始业务需求,确定所述候选业务需求中的目标业务需求,包括:
在所述待修改数据维度下,基于所述初始业务需求确定所述目标业务需求,所述目标业务需求包括待修改元数据的修改需求和/或所述数据类型的修改需求。
第二方面,本申请还提供了一种字节码修改装置。所述装置包括:
候选业务逻辑获取模块,用于获取候选业务逻辑类集合,所述候选业务逻辑类集合包括修改函数与至少一个候选业务逻辑类,所述候选业务逻辑类对应于候选业务需求;
待修改字节码加载模块,用于加载待修改字节码,所述待修改字节码包括初始业务逻辑类,所述初始业务逻辑类对应于初始业务需求,初始业务需求的维度包括缺失日志的修复需求维度与待修改字节码的测试需求维度中的至少一种;
业务需求确定模块,用于基于所述初始业务需求中的至少一个维度,确定所述候选业务需求中的目标业务需求,基于所述目标业务需求,确定所述候选业务逻辑类集合中的目标业务逻辑类;
字节码修改模块,用于将所述修改函数实例化,基于实例化的所述修改函数将包括所述初始业务逻辑类的待修改字节码替换为包括所述目标业务逻辑类的字节码。
第三方面,本申请还提供了一种计算机设备。所述计算机设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
获取候选业务逻辑类集合,所述候选业务逻辑类集合包括修改函数与至少一个候选业务逻辑类,所述候选业务逻辑类对应于候选业务需求;
加载待修改字节码,所述待修改字节码包括初始业务逻辑类,所述初始业务逻辑类对应于初始业务需求,初始业务需求的维度包括缺失日志的修复需求维度与待修改字节码的测试需求维度中的至少一种;
基于所述初始业务需求中的维度,确定所述候选业务需求中的目标业务需求,基于所述目标业务需求,确定所述候选业务逻辑类集合中的目标业务逻辑类;
将所述修改函数实例化,基于实例化的所述修改函数将包括所述初始业务逻辑类的待修改字节码替换为包括所述目标业务逻辑类的字节码。
第四方面,本申请还提供了一种计算机可读存储介质。所述计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
获取候选业务逻辑类集合,所述候选业务逻辑类集合包括修改函数与至少一个候选业务逻辑类,所述候选业务逻辑类对应于候选业务需求;
加载待修改字节码,所述待修改字节码包括初始业务逻辑类,所述初始业务逻辑类对应于初始业务需求,初始业务需求的维度包括缺失日志的修复需求维度与待修改字节码的测试需求维度中的至少一种;
基于所述初始业务需求中的维度,确定所述候选业务需求中的目标业务需求,基于所述目标业务需求,确定所述候选业务逻辑类集合中的目标业务逻辑类;
将所述修改函数实例化,基于实例化的所述修改函数将包括所述初始业务逻辑类的待修改字节码替换为包括所述目标业务逻辑类的字节码。
第五方面,本申请还提供了一种计算机程序产品。所述计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现以下步骤:
获取候选业务逻辑类集合,所述候选业务逻辑类集合包括修改函数与至少一个候选业务逻辑类,所述候选业务逻辑类对应于候选业务需求;
加载待修改字节码,所述待修改字节码包括初始业务逻辑类,所述初始业务逻辑类对应于初始业务需求,初始业务需求的维度包括缺失日志的修复需求维度与待修改字节码的测试需求维度中的至少一种;
基于所述初始业务需求中的维度,确定所述候选业务需求中的目标业务需求,基于所述目标业务需求,确定所述候选业务逻辑类集合中的目标业务逻辑类;
将所述修改函数实例化,基于实例化的所述修改函数将包括所述初始业务逻辑类的待修改字节码替换为包括所述目标业务逻辑类的字节码。
上述字节码修改方法、装置、计算机设备、存储介质和计算机程序产品,通过候选业务逻辑类集合提供了一种新的修改方向,可以在业务逻辑类字节码这一特殊层面,对待修改字节码进行修改,无需使用固定的切入点进行字节码的修改,使字节码能面向各种程序,降低了代码侵入可能性;而基于待修改字节码所对应的初始业务需求维度选取目标业务需求,这一过程为候选业务逻辑类的复用提供了保障,使程序更灵活地应对各种场景;此外,基于实例化的修改函数,将初始业务逻辑类字节码替换为目标业务逻辑类字节码,让修改维度的相关逻辑与服务逻辑解耦,降低了依赖性,不容易产生问题,且维护较为方便。
附图说明
图1为一个实施例中字节码修改方法的应用环境图;
图2为一个实施例中字节码修改方法的流程示意图;
图3为一个实施例中替换字节码的流程示意图;
图4为一个实施例中替换字节码的流程示意图;
图5为一个实施例中得到预设业务逻辑数据包的流程示意图;
图6为一个实施例中生成代理类文件的流程示意图;
图7为一个实施例中初始业务需求的元数据维度的流程示意图;
图8为一个实施例中不同维度下比对的流程示意图;
图9为一个实施例中生成代理类程序的流程示意图;
图10为一个实施例中进行替换的流程示意图;
图11为一个实施例中进行修改的流程示意图;
图12为一个实施例中字节码修改方法整体流程示意图;
图13为一个实施例中元数据对应的修改界面示意图;
图14为一个实施例中字节码修改装置的结构框图;
图15为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。在以下的描述中,“A和/或B”的含义是“A以及B中的至少之一”。
本申请实施例提供的字节码修改方法,可以应用于如图1所示的应用环境中。其中,终端102通过网络与服务器104进行通信。数据存储系统可以存储服务器104需要处理的数据。数据存储系统可以集成在服务器104上,也可以放在云上或其他网络服务器上。其中,终端102可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑、物联网设备和便携式可穿戴设备,物联网设备可为智能音箱、智能电视、智能空调、智能车载设备等。便携式可穿戴设备可为智能手表、智能手环、头戴设备等。服务器104可以用独立的服务器或者是多个服务器组成的服务器集群来实现。本申请实施例提供的方案可以由终端102实现;也可以由终端102和服务器104协同实现,例如:终端102可以向服务器104提供某些信息,以便服务器104进行相关的计算过程,而服务器104计算之后,会将计算结果反馈给终端102,再由终端102实现字节码文件的替换;又如,使用分布式算法,将终端102与服务器104均作为分布式算法中的节点,通过多个节点进行资源互助,以实现相应的效果。
在一个实施例中,如图2所示,提供了一种字节码修改方法,以该方法应用于图1中的服务器104为例进行说明,包括以下步骤:
步骤202,获取候选业务逻辑类集合,候选业务逻辑类集合包括修改函数与至少一个候选业务逻辑类,候选业务逻辑类对应于候选业务需求。
修改函数,其可以是一种用于修改某些程序中业务逻辑的函数,也可以是其他具有修改业务逻辑功能的数据结构或算法。对于修改函数本身而言,其可以是一种通用的业务逻辑,而在特殊情况下,会使用修改函数充当候选业务逻辑类。例如,如果待修改字节码就是封装好的业务逻辑类集合,则使用另一个业务逻辑类集合对待修改字节码进行修改时,候选业务逻辑类可能会包括一个或多个修改函数。
候选业务逻辑类,其是一种用于对待修改字节码进行修改的业务逻辑类。候选业务逻辑类是一种特殊的数据类型,包含属性和用于替换的业务逻辑函数,而业务逻辑函数可以是操作数据的相关函数,可以是传递消息的相关函数。一个候选业务逻辑类实例化后,可以生成多个数据对象,各数据对象分别具有该候选业务逻辑类的属性和相关函数,且各数据对象还可以进一步添加个性化的数据,实现不同的功能。其中,候选业务逻辑类和实例化的候选业务逻辑类的区别一方面在于,候选业务逻辑类是一种数据类型,并不是可以存储于内存中的数据,而实例化的候选业务逻辑类是一种可以存储于内存中的数据,并不是一种数据类型;候选业务逻辑类和实例化的候选业务逻辑类的另一方面区别在于:候选业务逻辑类还可以作为基类,添加某些个性化的相关函数,以生成相应的派生类,再基于派生类生成一个或多个数据对象,相对应的,基于派生类生成的数据对象既包括基类的属性与函数,也包括派生类中个性化的相关函数。
步骤204,加载待修改字节码,待修改字节码包括初始业务逻辑类,初始业务逻辑类对应于初始业务需求,初始业务需求的维度包括缺失日志的修复需求维度与待修改字节码的测试需求维度中的至少一种。
待修改字节码,其可以是用于实现某种功能的功能性文件,也可以是缺失日志的文件。如果待修改字节码是功能性文件,则实现该文件的相关功能需要初始业务逻辑类来实现,而初始业务逻辑类对应于至少一个初始业务需求,初始业务需求的第一维度是对数据与数据类型的检测或修改,而初始业务需求的第二维度是缺失日志的修复需求和/或待修改字节码的测试需求,其中,第一维度与第二维度结合之后,才是初始业务需求真正的维度,可以动态地进行字节码文件的修复与修改。
相对应的,如果待修改字节码是缺失日志的文件,则该文件的部分功能可能无法通过初始业务逻辑类实现,而初始业务逻辑类对应于至少一个初始业务需求,则初始业务需求的第一维度是对数据与数据类型的修改,而初始业务需求的第二维度是缺失日志的修复需求,其中,第一维度与第二维度结合之后,可以动态地进行字节码文件的修复。可以理解,修复日志后的待修改字节码也可以作为用于进行测试的待修改字节码;基于同一原理,在测试后的待修改字节码也可以是缺失日志的待修改字节码。
加载待修改字节码,可以确定待修改字节码所对应的主程序,将该主程序的业务逻辑类对应的二进制或十六机制的数据读入到内存中,将这些数据放在程序运行时的函数区内,然后在内存中创建一个待修改字节码的类对象,用来分装类在函数区内的数据结构,由此可以就获得初始业务逻辑类。
步骤206,基于初始业务需求中的维度,确定候选业务需求中的目标业务需求,基于目标业务需求,确定候选业务逻辑类集合中的目标业务逻辑类。
初始业务需求的维度包括缺失日志的修复需求维度,待修改字节码的测试需求维度,以及,修复与测试相结合的需求维度,其中,修复与测试相结合的需求维度还包括日志修复在先的需求维度与程序测试在先的需求维度等至少两个维度。
候选业务需求与初始业务需求所属的维度可以存在一定相似性,二者都可以划分为第一维度与第二维度,第一维度用于确定所修改的具体数据或具体数据类型的维度,而第二维度用于确定待修改字节码需要进行日志修复还是需要进行测试。候选业务需求与初始业务需求所属的维度也可以存在一定区别,多数候选业务需求只着眼于修复需求维度或者测试需求维度中的一个。因而,按照初始业务需求的维度可以划分出初始业务需求的多个子需求,各个子需求可以分别对应于候选业务需求集合中的某一个候选业务需求,而该维度所对应的多个候选业务需求就是初始业务需求所对应的目标业务需求,即,初始业务需求的任一维度可以对应于多个目标业务需求。可以理解,如果初始业务需求的维度对应于多个目标业务需求,则各目标业务需求可以分别对应于不同的功能性需求,这些功能性需求用于实现该维度内的数据或数据类型的修复与替换,因而,目标业务需求可以有对应于“门诊病人类的数据的修改需求”、“门诊病人类的数据类型的修改需求”、“门诊病人类的数据及数据类型的修改需求”等修改需求的需求标识,而需求标识可以是字符串、整型、长整型、浮点型、类等任意数据类型。
在得到目标业务需求之后,基于目标业务需求确定目标业务逻辑类,即是将目标业务需求对应的候选业务逻辑类作为目标业务逻辑类,而目标业务需求与目标业务逻辑类是一一对应的映射关系,通过这种映射关系可以准确地获取目标业务逻辑类。由此,需求间的匹配过程细化了粒度,匹配失误的可能性降低,更容易得到目标业务需求。
步骤208,将修改函数实例化,基于实例化的修改函数将包括初始业务逻辑类的待修改字节码替换为包括目标业务逻辑类的字节码。
修改函数实例化的过程,可以基于代理类字节码所实现,也可以通过基于某些事件做出反应而实现的。例如,可以先加载代理类程序,以实例化修改函数,再加载待修改字节码,最后,通过实例化修改函数将初始业务逻辑类字节码替换为目标业务逻辑类字节码;又如:可以在加载待修改字节码时,同步获取相应的修改函数,并在虚拟机执行待修改字节码之后,实例化修改函数,得到修改函数对象,使用修改函数对象,将初始业务逻辑类字节码转化为目标业务逻辑类字节码。
上述字节码修改方法中,获取候选业务逻辑类集合,候选业务逻辑类集合包括修改函数与至少一个候选业务逻辑类,候选业务逻辑类对应于候选业务需求;加载待修改字节码,待修改字节码包括初始业务逻辑类,初始业务逻辑类对应于初始业务需求,初始业务需求的维度包括缺失日志的修复需求维度与待修改字节码的测试需求维度中的至少一种;基于初始业务需求中的维度,确定候选业务需求中的目标业务需求,基于目标业务需求,确定候选业务逻辑类集合中的目标业务逻辑类;将修改函数实例化,基于实例化的修改函数,将包括初始业务逻辑类的待修改字节码替换为包括目标业务逻辑类的字节码。由此,候选业务逻辑类集合提供了一种新的修改方向,可以在业务逻辑类字节码这一特殊层面,对待修改字节码进行修改,无需使用固定的切入点进行字节码的修改,使字节码能面向各种程序,降低了代码侵入性;而基于待修改字节码所对应的初始业务需求维度选取目标业务需求,这一过程为候选业务逻辑类的复用提供了保障,使程序更灵活地应对各种场景;此外,基于实例化的修改函数,将包括初始业务逻辑类的待修改字节码替换为包括目标业务逻辑类的字节码,让修改维度的相关逻辑与服务逻辑解耦,降低了依赖性,不容易产生问题,且维护较为方便。
在一个实施例中,如图3所示,修改函数包括业务逻辑类的路径确定类及属性修改类,其中,路径确定类,其可以是类库中的某一具体类,也可以是通过属性修改类所生成的类,其也可以是类池,其用于确定目标业务逻辑类的位置,和/或,初始业务逻辑类的位置;路径确定类可以确定各种类的具体位置,进而直接创建或者修改相应的类,实现跟踪和控制所操作的类。属性修改类,其可以是库类中的某一具体类,也可以通过路径确定类所获取到的类,其可以是用于加载的类,可以使用目标业务逻辑类中的任意字节码来修正初始业务逻辑类中的任意字节码。而在加载待修改字节码后,获取路径确定类及属性修改类,是因为路径确定类与属性修改类需要基于加载的待修改字节码,才能进行工作。
获取候选业务逻辑类集合包括:
步骤302,按照业务需求,基于属性修改类生成候选业务逻辑类,候选业务逻辑类包括用于替换的属性、函数及字节码文件中的一个或多个。
相对应的,该方法还包括:
步骤304,基于路径确定类,确定初始业务逻辑类的路径信息,基于路径信息确定初始业务逻辑类中的待修改数据,待修改数据包括待修改的属性、函数及字节码文件中的一个或多个,其中,候选业务逻辑类用于对初始业务逻辑类中的待修改数据进行替换。
本实施例中,通过属性修改类来生成候选业务逻辑类,因而,基于候选业务逻辑所选出的目标业务逻辑类随着待修改程序在虚拟机中加载运行,通过路径确定类寻找待修改数据的位置,从而细化待修改数据的粒度,可以对具体字节码文件中的属性、函数或者整个字节码文件进行替换。
在一个实施例中,如图4所示,候选业务逻辑类集合包括预设业务逻辑类集合,获取候选业务逻辑类集合,包括:
步骤402,在加载待修改字节码之前,获取预设业务逻辑数据包。
预设业务逻辑数据包的获取过程,要先于加载待修改字节码,因为预设业务逻辑数据包相当于一个自定义拦截器,替换尚未加载的待修改字节码,由此,一方面可以增加本方法执行的稳定性,避免字节码的修改过程不容易出现问题,另一方面,通过预设业务逻辑数据包为候选业务逻辑类的复用提供了保障,使程序更灵活地应对各种场景。
步骤404,从预设业务逻辑数据包中,加载预设业务逻辑类集合,预设业务逻辑类集合包括对应于预设业务方法类字节码的预设业务方法类。
业务方法类,是对方法这一特殊函数而定义的类,业务方法类中存在类间的对应关系;在业务方法类实例化后,业务方法类中存在的类按照类间的对应关系,生成具有依赖关系的数据对象,该数据对象及实例化的业务方法类,用于实现某个特定的应用程序功能。而预设业务方法类是用于对业务逻辑替换过程进行操作的一种数据类型,预设业务方法类实例化后,可以得到对应的业务逻辑对象,该业务逻辑对象对应于预设业务方法类字节码。
相对应的,基于实例化的修改函数将初始业务逻辑类字节码替换为目标业务逻辑类字节码,包括:
步骤406,基于实例化的修改函数将包括初始业务逻辑类的待修改字节码替换为包括目标业务逻辑类的字节码。
在初始业务逻辑类字节码进行替换之后,待修改字节码仍然处于加载的状态中,整体加载可以依靠单一任务执行主体来完成,可以保证整体加载的稳定性与可靠性。进而保障执行的稳定性。其中,在待修改字节码进行替换前与替换后,可以使用同一进程或线程来进行加载。
本实施例中,通过预先加载的预设业务逻辑数据包,可以较为便捷地调取相应的业务逻辑类集合,直接应用预设业务方法类进行业务逻辑类的替换,实现预设业务方法类字节码的整体替换,执行的稳定性得以增加,待修改字节码的可能性,同时,为候选业务逻辑类的复用提供了保障,使程序更灵活地应对各种场景。
在一个实施例中,如图5所示,预设业务逻辑数据包的生成,包括:
步骤502,确定代理类文件,代理类文件用于修改初始业务逻辑类。
代理类文件,也可以称为代理函数、代理类程序或代理人程序,其一般是用户通过用于生成代理类文件的虚拟机所编写的,用于实现文件替换的功能。代理类文件与待修改字节码属于不同的两个任务,可以通过两个进程分别加载。
步骤504,获取用于测试的虚拟接口,基于虚拟接口生成虚拟接口类文件。
虚拟接口类文件,主要是可以随意配置的某种文件,也可以认为是一个类,用于定义进行虚拟测试的相关接口。虚拟接口类文件,可以使测试的过程兼容各种各样的应用环境。
步骤506,对代理类文件与虚拟接口类文件进行组合,对组合后的文件进行编译,得到预设业务逻辑数据包。
本实施例中,通过代理类文件,使预设业务逻辑数据包与待修改字节码分别对应的程序分别进行加载,加载待修改字节码所导致问题得以避免,实现预设业务方法类字节码的整体替换,执行的稳定性得以增加,待修改字节码的可能性,进一步地降低代码侵入的可能性,使字节码能更好地面向各种程序;而基于虚拟接口生成虚拟接口类文件,使预设业务逻辑数据包不会因为测试问题而导致其他文件产生问题,保障了字节码修改过程中的系统稳定性。
在一个实施例中,如图6所示,代理类文件的生成,包括:
步骤602,确定代理类文件的清单文件,清单文件用于定义代理类文件的修改权限。
代理类文件的修改权限,可以方便多个函数的整体调度,实现预设业务方法类字节码的整体替换,执行的稳定性得以增加,待修改字节码修改时出现问题的可能性得以降低。由此,进一步使字节码能面向各种程序,且代码侵入的可能性得以降低。
步骤604,确定代理类文件的修改类,修改类包括代理类文件的修改函数,其中,实例化的修改函数用于将初始业务逻辑类字节码替换为目标业务逻辑类字节码。
步骤606,组合清单文件与修改类,生成代理类文件。
本实施例中,通过清单文件确定代理类文件的修改程度,通过修改类将修改函数进行组合,由此解耦了修改类与清单文件,通过清单文件来定义修改类中修改函数的执行权限,进一步地提高修改函数的复用效率,降低了依赖性,不容易产生问题,且维护较为方便。
在一个实施例中,该方法还包括:
若初始业务需求的维度为日志缺失,则将代理类程序中的日志添加到待修改字节码中。
若初始业务需求的维度为程序测试,则应用代理类程序中的虚拟接口替换待测试程序中的第三方地址,将替换接口的待测试程序作为待修改字节码。
本实施例中,基于初始业务需求的维度,定义两种维度下的执行程序,通过日志缺失维度,将日志添加到相应位置;基于程序测试维度,使用替换接口的待测试程序,更便于自由调度,由此,无需使用固定的切入点进行字节码的修改,使字节码能面向各种程序,降低了代码侵入的可能性。
在一个实施例中,如图7所示,初始业务需求的维度还包括待修改数据维度,待修改数据维度包括待修改元数据及待修改元数据的数据类型,元数据是一种用于构建具体的业务数据、业务逻辑、数据结构等任意数据或数据类型的数据,相当于一种数据模板,而一个元数据常常会对应于多个业务数据类、业务数据实体或静态数据,而通过修改元数据可以批量修改业务数据类、业务数据实体。基于此,方法还包括:
步骤702,在加载待修改字节码前,获取待修改字节码对应的待修改数据维度。
待修改数据维度,可以与初始业务需求的维度存在一定相关性,主要是对数据或数据类型等因素进行的修改,这些数据都有其所对应的字节码文件。其是传统意义上的修改维度,主要是指具体的修改数据。
基于初始业务需求,确定候选业务需求中的目标业务需求,包括:
步骤704,在待修改数据维度下,基于初始业务需求确定目标业务需求,目标业务需求包括待修改元数据的修改需求和/或数据类型的修改需求。
本实施例中,基于待修改数据维度确定可以动态调节的待修改数据维度,在待修改数据维度下,选择元数据或元数据的数据类型进行修改,由此,可以将元数据生成的各个文件同步修改,具有较高地修改效率,为候选业务逻辑类的复用提供了保障,使程序更灵活地应对各种场景。
上述各实施例均有其侧重点,为了更好地描述整体的技术方案,将使用一个较为完整的实施例,对整体业务流程进行论述。
如图8所示,其展示了进行测试的环境,以及,日志修复的环境;
其中,当处于测试环境时,其包括如下使用步骤:
1、确定第三方程序功能,以便于调用;
2、将第三方程序的地址替换为虚拟接口mock的地址,虚拟接口mock的地址与待测试接口相对应,待测试接口可以是新的接口;
3、从前端界面配置初始业务需求、初始业务需求的维度及待修复数据的维度,在该维度下获取虚拟接口mock的接口脚本,最后,执行代理类程序,实现测试相关功能。
由此,在测试的环境下,如果需要第三方mock的场景,只需要在管理平台配置切点、编写mock的脚本,重启服务。无需再与研发人员进行沟通和依赖,测试人员可以自己实现测试的需求。
其中,当处于日志修复的环境时,其包括如下步骤:
运维人员通过运维程序检查到待修改字节码的问题,在对该问题进行处理时,检查日志,若日志缺失,则对研发人员对应的程序发出指令,生成初始业务需求;
在该维度下,研发人员从前端界面配置初始业务需求,通过代理类程序选择初始业务需求的维度及待修改数据的维度,通过代理类程序进行日志修复,并在重启代理类程序后,将流程节点返回给运维人员;
运维人员继续进行问题排查,直至排查完毕。其中,运维人员可以添加日志的场景,研发人员收到需求后,不用修改主服务的代码,只需要编写Agent中的代码,重启服务即可实现动态加入日志的需求,降低了代码的耦合性、服务修改的风险。
在一个可选的实施例中,如图9所示,对代理类程序的编写流程进行阐述,其包括如下步骤:
1、在Agent工程代码里,定义一个MANIFEST.MF清单文件,一定要包含Premain-Class选项;例如:
Manifest-Version:1.0
Can-Redefine-Classes:true
Can-Retransform-Classes:true
Premain-Class:com.kingdeehit.PreMainAgent
其中,“Manifest-Version:1.0”表示该程序对应的代码版本,用于进行合法性检验;“Can-Redefine-Classes:true”表示允许修改java程度代码,该程度是可以重定义类;而“Can-Retransform-Classes:true”表示允许修改java程度代码,该程度是可以定义插桩类;“Premain-Class”表示预先加载的类。
2、创建一个Premain-Class指定的类,类中包含premain方法,增加打日志的逻辑,“premain方法”表示预先加载;
3、将premain的类和清单文件MANIFEST.MF打包成jar包;
4、使用参数-javaagent:jar包的路径启动主服务;
5、JAVA虚拟机(JVM)加载代理类程序Agent代码,并执行Agent中修改字节码逻辑;
在一个可选的实施例中,如图10所示,以门诊业务为例,在研发人员编写完Agent代码,启动程序的时候,先通过Agent启动参数java-javaagent:agent.jar,对代理类程序的Agent代码执行进行阐述,其包括:
1、待修改字节码对应的主方法main执行之前,执行agent中的premain方法;
2、在premain方法中使用Instrumentation对象实例的转化函数addTransformer向JVM添加agent中的添加的“门诊业务中方法”的日志;
3、JAVA虚拟机(JVM)的systemClassLoader获取待修改字节码“门诊业务类文件”;
4、JAVA虚拟机(JVM)在加载“门诊业务类文件”之前,调用转化函数ClassFileTransformer的transform方法,来增加门诊业务类接口的日志;
5、将修改过的门诊业务类字节码文件传回给虚拟机(JVM),实现动态增加日志。
在一个可选的实施例中,如图11所示,论述通过路径确定类及属性修改类进行修改的具体步骤,属性修改类是类池ClassPool,属性修改类是用于确定属性的CtClass类,其包括:
1、构造ClassPool类,它是javassist的类池,使用ClassPool类可以跟踪和控制所操作的类;
2、将管理平台编写的脚本生成class文件,复制到指定路径,插入到ClassPool的初始化相关的字节码中;
3、通过CtClass获取门诊业务类,把第三方服务的调用地址,通过用于对业务逻辑类删除的类cClass.getDeclaredMethod和用于将要插入业务逻辑类的类cMethod.insertAt等类方法,替换掉初始业务逻辑类,最后通过toClass的方法编译、转换成Class字节码对象或者直接写入会类文件class文件。
在一个可选地实施例中,如图12所示,同时描述上述两种实施方式的协同工作,其包括代理类程序编码,通过管理平台获取到的数据,基于路径信息加载数据包,启动JAVA虚拟机,以及虚拟机运行,实现动态调试维度的这五个模块。
1、在编码模块,先撰写代理类程序Agent程序,再定义相应的清单文件,最后编译成代理类的修改类字节码文件,而修改类字节码文件是预设业务逻辑数据包的一部分;其中,修改类字节码文件用于进行数据的修改;
2、在管理平台获取数据的模块,其需要编写虚拟接口脚本,虚拟接口脚本是已使用虚拟接口对第三方地址替代的脚本,基于虚拟接口脚本生成虚拟接口类文件,将虚拟接口脚本与修改类字节码文件组合,得到预设业务逻辑数据包。
3、启动代理类程序和待修改字节码对应的主程序,其中,用于获取代理类程序的预设业务逻辑数据包的路径信息是:java-javaagent:门诊业务Agent.jar-jar门诊服务.jar。
4、在java虚拟机JVM启动阶段,可以先执行实现增添日志的需求维度,先验证类文件的合法性,包括JAVA版本是否兼容等信息;在合法性验证之后,基于双亲委派机制静态加载代理类程序Agent;在加载代理类程序后,获取待修改字节码的初始业务逻辑类“门诊业务类”,再基于代理类程序Agent中的修改函数,修改方法类,实现日志增添;
5、在java虚拟机JVM启动阶段,也可以先执行测试的需求维度,可选择Javassist类库中的路径确定类及属性修改类进行修改,并将第三方地址URL替换为虚拟脚本的接口地址,进行测试,进而得到具有目标业务逻辑类的字节码文件,该可以先执行实现增添日志的需求维度属于“门诊业务类”。
6、最后,将具有目标业务逻辑类的字节码文件进行加载,实现动态切面,随意调整修改维度,以对待修改数据进行修改,待修改数据可以是元数据或元数据类型或者具体的数据,而随意调整修改维度的界面如图13所示。
将这一具体的方案与SpringAOP原有的流程进行比对可知,本方案可以实现虚拟机层面的AOP,不需要在代码里面将所有切面写死。本实施例能提供2种方式的动态切面,一个是在JVM静态加载时,通过JavaAgent方式,用instrumentation的premain方法,修改已经编译好的class字节码文件,达到动态修改的目的;这种方式只能修改类定义的方法体,不能修改方法名和新增方法或属性,这种方式可以满足门诊业务类增加日志逻辑。另外,在Agent的启动同时,也可以采用Javassist读取门诊业务类,并动态修改其中调用第三方服务的代码,把URL地址改为公司的mock服务地址。通过这个流程实现了测试人员通过配置编写实现mock的需求。本实施例效果在于,首先,降低了程序代码写死的耦合性,降低代码侵入性,可以根据实际需求动态添加切面,应对更复杂的实际场景;其次,降低了研发过程中的依赖和沟通成本,提高测试、运维、研发效率;再次,相对其他实现动态切面的方式,性能和灵活性更高;此外,采用Javassist动态字节码技术,比ASM更易用简单,无须了解JVM指令。
应该理解的是,虽然如上所述的各实施例所涉及的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,如上所述的各实施例所涉及的流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
基于同样的发明构思,本申请实施例还提供了一种用于实现上述所涉及的字节码修改方法的字节码修改装置。该装置所提供的解决问题的实现方案与上述方法中所记载的实现方案相似,故下面所提供的一个或多个字节码修改装置实施例中的具体限定可以参见上文中对于字节码修改方法的限定,在此不再赘述。
在一个实施例中,如图14所示,提供了一种字节码修改装置,包括:
候选业务逻辑获取模块1402,用于获取候选业务逻辑类集合,所述候选业务逻辑类集合包括修改函数与至少一个候选业务逻辑类,所述候选业务逻辑类对应于候选业务需求;
待修改字节码加载模块1404,用于加载待修改字节码,所述待修改字节码包括初始业务逻辑类,所述初始业务逻辑类对应于初始业务需求,初始业务需求的维度包括缺失日志的修复需求维度与待修改字节码的测试需求维度中的至少一种;
业务需求确定模块1406,用于基于所述初始业务需求中的维度,确定所述候选业务需求中的目标业务需求,基于所述目标业务需求,确定所述候选业务逻辑类集合中的目标业务逻辑类;
字节码修改模块1408,用于将所述修改函数实例化,基于实例化的所述修改函数将包括所述初始业务逻辑类的待修改字节码替换为包括所述目标业务逻辑类的字节码。
在其中一个实施例中,所述修改函数包括业务逻辑类的路径确定类及属性修改类,所述候选业务逻辑获取模块1402包括:
业务需求确定单元,用于按照候选业务需求,基于所述属性修改类生成所述目标业务逻辑类,所述候选业务逻辑类包括用于替换的属性、函数及字节码文件中的一个或多个;
相对应的,所述装置还包括路径确定模块;
路径确定模块,用于基于所述路径确定类,确定所述初始业务逻辑类的路径信息,基于所述路径信息确定所述初始业务逻辑类中的待修改数据,所述待修改数据包括待修改的属性、函数及字节码文件中的一个或多个;其中,所述候选业务逻辑类用于对所述初始业务逻辑类中的待修改数据进行替换。
在其中一个实施例中,所述候选业务逻辑类集合包括预设业务逻辑类集合,所述候选业务逻辑获取模块1402,包括:
预设数据包获取单元,用于在加载所述待修改字节码之前,获取预设业务逻辑数据包;
预设方法体获取单元,用于从所述预设业务逻辑数据包中,加载所述预设业务逻辑类集合,所述预设业务逻辑类集合包括对应于预设业务方法类字节码的预设业务方法类;
所述字节码修改模块1408,包括:方法体替换单元,用于基于实例化的所述修改函数将包括所述初始业务逻辑类的待修改字节码替换为包括所述目标业务逻辑类的字节码。
在其中一个实施例中,所述装置还包括数据包生成模块,所述括数据包生成模块包括:
代理类文件确定单元,用于确定所述代理类文件,所述代理类文件用于修改所述初始业务逻辑类;
接口类文件确定单元,用于获取用于测试的虚拟接口,基于所述虚拟接口生成虚拟接口类文件;
数据包生成单元,用于对所述代理类文件与所述虚拟接口类文件进行组合,对组合后的文件进行编译,得到所述预设业务逻辑数据包。
在其中一个实施例中,所述代理类文件确定单元,包括:
清单确定子单元,用于确定代理类文件的清单文件,所述清单文件用于定义所述代理类文件的修改权限;
修改类确定子单元,用于确定代理类文件的修改类,所述修改类包括所述代理类文件的修改函数;其中,实例化的所述修改函数用于将所述初始业务逻辑类字节码替换为所述目标业务逻辑类字节码;
代理类文件生成子单元,用于组合所述清单文件与所述修改类,生成所述代理类文件。
在其中一个实施例中,所述装置还包括维度确定模块,所述维度确定模块包括:
日志维度单元,用于若所述初始业务需求的维度为日志缺失,则将代理类程序中的日志添加到所述待修改字节码中;
测试维度单元,用于若所述初始业务需求的维度为程序测试,则应用代理类程序中的虚拟接口替换待测试程序中的第三方地址,将替换接口的所述待测试程序作为所述待修改字节码。
在其中一个实施例中,初始业务需求的维度还包括待修改数据维度,所述待修改数据维度包括待修改元数据及所述待修改元数据的数据类型,所述装置包括数据维度确定模块;
所述数据维度确定模块,用于在加载待修改字节码前,获取所述待修改字节码对应的待修改数据维度;
所述基于所述初始业务需求,确定所述候选业务需求中的目标业务需求,包括:
业务需求确定模块1406,用于在所述待修改数据维度下,基于所述初始业务需求确定所述目标业务需求,所述目标业务需求包括待修改元数据的修改需求和/或所述数据类型的修改需求。
上述字节码修改装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图15所示。该计算机设备包括通过系统总线连接的处理器、存储器和网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质和内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种字节码修改方法。
本领域技术人员可以理解,图15中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,还提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-OnlyMemory,ROM)、磁带、软盘、闪存、光存储器、高密度嵌入式非易失性存储器、阻变存储器(ReRAM)、磁变存储器(Magnetoresistive Random Access Memory,MRAM)、铁电存储器(Ferroelectric Random Access Memory,FRAM)、相变存储器(Phase Change Memory,PCM)、石墨烯存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器等。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic RandomAccess Memory,DRAM)等。本申请所提供的各实施例中所涉及的数据库可包括关系型数据库和非关系型数据库中至少一种。非关系型数据库可包括基于区块链的分布式数据库等,不限于此。本申请所提供的各实施例中所涉及的处理器可为通用处理器、中央处理器、图形处理器、数字信号处理器、可编程逻辑器、基于量子计算的数据处理逻辑器等,不限于此。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请的保护范围应以所附权利要求为准。

Claims (10)

1.一种字节码修改方法,其特征在于,所述方法包括:
获取候选业务逻辑类集合,所述候选业务逻辑类集合包括修改函数与至少一个候选业务逻辑类,所述候选业务逻辑类对应于候选业务需求;
加载待修改字节码,所述待修改字节码包括初始业务逻辑类,所述初始业务逻辑类对应于初始业务需求,初始业务需求的维度包括缺失日志的修复需求维度与待修改字节码的测试需求维度中的至少一种;
基于所述初始业务需求中的维度,确定所述候选业务需求中的目标业务需求,基于所述目标业务需求,确定所述候选业务逻辑类集合中的目标业务逻辑类;
将所述修改函数实例化,基于实例化的所述修改函数将包括所述初始业务逻辑类的待修改字节码替换为包括所述目标业务逻辑类的字节码。
2.根据权利要求1所述的方法,其特征在于,所述修改函数包括业务逻辑类的路径确定类及属性修改类,所述获取候选业务逻辑类集合包括:
按照所述候选业务需求,基于所述属性修改类生成所述候选业务逻辑类,所述候选业务逻辑类包括用于替换的属性、函数及字节码文件中的一个或多个;
所述方法还包括:
基于所述路径确定类,确定所述初始业务逻辑类的路径信息,基于所述路径信息确定所述初始业务逻辑类中的待修改数据,所述待修改数据包括待修改的属性、函数及字节码文件中的一个或多个;
其中,所述候选业务逻辑类用于对所述初始业务逻辑类中的待修改数据进行替换。
3.根据权利要求1所述的方法,其特征在于,所述候选业务逻辑类集合包括预设业务逻辑类集合,所述获取候选业务逻辑类集合,包括:
在加载所述待修改字节码之前,获取预设业务逻辑数据包;
从所述预设业务逻辑数据包中,加载所述预设业务逻辑类集合,所述预设业务逻辑类集合包括对应于预设业务方法类字节码的预设业务方法类;
所述基于实例化的所述修改函数将包括所述初始业务逻辑类的待修改字节码替换为包括所述目标业务逻辑类的字节码,包括:
基于实例化的所述修改函数将包括所述初始业务逻辑类的待修改字节码替换为包括所述目标业务逻辑类的字节码。
4.根据权利要求3所述的方法,其特征在于,所述预设业务逻辑数据包的生成,包括:
确定代理类文件,所述代理类文件用于修改所述初始业务逻辑类;
获取用于测试的虚拟接口,基于所述虚拟接口生成虚拟接口类文件;
对所述代理类文件与所述虚拟接口类文件进行组合,对组合后的文件进行编译,得到所述预设业务逻辑数据包。
5.根据权利要求4所述的方法,其特征在于,所述代理类文件的生成,包括:
确定代理类文件的清单文件,所述清单文件用于定义所述代理类文件的修改权限;
确定代理类文件的修改类,所述修改类包括所述代理类文件的修改函数;其中,实例化的所述修改函数用于将所述初始业务逻辑类字节码替换为所述目标业务逻辑类字节码;
组合所述清单文件与所述修改类,生成所述代理类文件。
6.根据权利要求1至5任一项所述的方法,其特征在于,所述方法,还包括:
若所述初始业务需求的维度为日志缺失,则将代理类程序中的日志添加到所述待修改字节码中;
若所述初始业务需求的维度为程序测试,则应用代理类程序中的虚拟接口替换待测试程序中的第三方地址,将替换接口的所述待测试程序作为所述待修改字节码。
7.根据权利要求1至5任一项所述的方法,其特征在于,初始业务需求的维度还包括待修改数据维度,所述待修改数据维度包括待修改元数据及所述待修改元数据的数据类型,所述方法还包括:
在加载待修改字节码前,获取所述待修改字节码对应的待修改数据维度;
所述基于所述初始业务需求,确定所述候选业务需求中的目标业务需求,包括:
在所述待修改数据维度下,基于所述初始业务需求确定所述目标业务需求,所述目标业务需求包括待修改元数据的修改需求和/或所述数据类型的修改需求。
8.一种字节码修改装置,其特征在于,所述装置包括:
候选业务逻辑获取模块,用于获取候选业务逻辑类集合,所述候选业务逻辑类集合包括修改函数与至少一个候选业务逻辑类,所述候选业务逻辑类对应于候选业务需求;
待修改字节码加载模块,用于加载待修改字节码,所述待修改字节码包括初始业务逻辑类,所述初始业务逻辑类对应于初始业务需求,初始业务需求的维度包括缺失日志的修复需求维度与待修改字节码的测试需求维度中的至少一种;
业务需求确定模块,用于基于所述初始业务需求中的至少一个维度,确定所述候选业务需求中的目标业务需求,基于所述目标业务需求,确定所述候选业务逻辑类集合中的目标业务逻辑类;
字节码修改模块,用于将所述修改函数实例化,基于实例化的所述修改函数将包括所述初始业务逻辑类的待修改字节码替换为包括所述目标业务逻辑类的字节码。
9.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7中任一项所述的方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7中任一项所述的方法的步骤。
CN202111591489.0A 2021-12-23 2021-12-23 字节码修改方法、装置、计算机设备和存储介质 Pending CN114416530A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111591489.0A CN114416530A (zh) 2021-12-23 2021-12-23 字节码修改方法、装置、计算机设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111591489.0A CN114416530A (zh) 2021-12-23 2021-12-23 字节码修改方法、装置、计算机设备和存储介质

Publications (1)

Publication Number Publication Date
CN114416530A true CN114416530A (zh) 2022-04-29

Family

ID=81267341

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111591489.0A Pending CN114416530A (zh) 2021-12-23 2021-12-23 字节码修改方法、装置、计算机设备和存储介质

Country Status (1)

Country Link
CN (1) CN114416530A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114996128A (zh) * 2022-05-19 2022-09-02 青矩技术股份有限公司 基于asm框架的脚本处理方法、装置、设备及存储介质

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114996128A (zh) * 2022-05-19 2022-09-02 青矩技术股份有限公司 基于asm框架的脚本处理方法、装置、设备及存储介质

Similar Documents

Publication Publication Date Title
US10055148B1 (en) Storing application data as an enhanced copy
US9836354B1 (en) Automated error detection and recovery for GPU computations in a service environment
US9274782B2 (en) Automated computer application update analysis
US11074154B2 (en) Identifying a source file for use in debugging compiled code
US20210173665A1 (en) Bootstrapping Profile-Guided Compilation and Verification
CN108599973B (zh) 一种日志关联方法、装置及设备
CN109144487B (zh) 进件业务开发方法、装置、计算机设备和存储介质
CN113656149A (zh) 一种应用处理方法、装置及相关设备
JP2017174418A (ja) モデルチェックのためのデータ構造抽象化
CN112667246A (zh) 应用功能扩展的方法、装置及电子设备
US11036527B2 (en) Class splitting in object-oriented environments
AU2017276243A1 (en) System And Method For Generating Service Operation Implementation
CN114416530A (zh) 字节码修改方法、装置、计算机设备和存储介质
CN111159040A (zh) 一种测试数据生成方法、装置、设备及存储介质
CN111159301A (zh) 一种基于智能合约的数据创建方法、装置、设备及存储介质
US11263115B2 (en) Problem diagnosis technique of memory corruption based on regular expression generated during application compiling
US8819494B2 (en) Automatically changing parts in response to tests
US20230177052A1 (en) Performance of sql execution sequence in production database instance
AU2021268828B2 (en) Secure data replication in distributed data storage environments
US20220083334A1 (en) Generation of equivalent microservices to replace existing object-oriented application
CN111045891B (zh) 基于java多线程的监控方法、装置、设备以及存储介质
CN112925523A (zh) 对象比较方法、装置、设备及计算机可读介质
US20080059103A1 (en) System and Method for Implementing a Programmable DMA Master With Date Checking Utilizing a Drone System Controller
US20240080360A1 (en) Preventing data spillage in multi-tenant services via request and response containerization with provenance checks
US11429513B1 (en) Testing and verifying cloud services using a computational graph

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