代码处理方法、装置、电子设备及存储介质与流程

文档序号:34030197发布日期:2023-05-05 11:03阅读:36来源:国知局
代码处理方法、装置、电子设备及存储介质与流程

本申请涉及计算机,尤其涉及一种代码处理方法、装置、电子设备及存储介质。


背景技术:

1、在java虚拟机指令中,有多个指令用于方法调用,这些指令中包含了被调用方法类名、方法名、参数信息等在常量池中的索引,通过调用指令的信息,可以获取到被调用方法的详细信息。

2、在现有技术中,获取java方法调用关系的方式为:使用java开发工具包提供的方法打开jar包或war包,并遍历其中的每个文件,对当前class文件对应的类进行解析,之后遍历当前处理的类中定义的方法的每一条指令,若当前指令属于方法调用指令,则通过方法调用指令获取对应的被调用方法信息,最后将以上不同方法之间的调用关系记录到文件。

3、然而,上述方法获取被调用方法的信息,在多数场景下能够获取到java方法调用关系,但存在一些场景无法获取到调用关系,包括子类继承父类、类实现接口等,也即获取到的方法调用关系不完整,会导致以方法调用关系为基础的其他分析不准确的情况发生。


技术实现思路

1、本申请提供一种代码处理方法、装置、电子设备及存储介质,以解决现有技术中获取到的方法调用关系不完整等问题。

2、第一方面,本申请实施例提供了一种代码处理方法,包括:

3、获取应用程序的执行参数涉及的jar包;

4、对所述jar包进行预处理,得到所述jar包中涉及继承的类名、类与实现相关的信息、所述类与继承相关的信息;

5、根据所述涉及继承的类名、所述类与继承相关的信息,确定所述涉及继承的类中父类的方法与子类的方法之间的调用关系;

6、根据所述类与实现相关的信息,确定接口调用实现类的方法的调用关系;

7、输出所述父类的方法与子类的方法之间的调用关系,和所述接口调用实现类的方法的调用关系。

8、第二方面,本申请实施例提供了一种代码处理装置,包括:

9、获取模块,用于获取应用程序的执行参数涉及的jar包;

10、处理模块,用于对所述jar包进行预处理,得到所述jar包中涉及继承的类名、类与实现相关的信息、所述类与继承相关的信息;

11、第一确定模块,用于根据所述涉及继承的类名、所述类与继承相关的信息,确定所述涉及继承的类中父类的方法与子类的方法之间的调用关系;

12、第二确定模块,用于根据所述类与实现相关的信息,确定接口调用实现类的方法的调用关系;

13、输出模块,用于输出所述父类的方法与子类的方法之间的调用关系,和所述接口调用实现类的方法的调用关系。

14、第三方面,本申请提供一种电子设备,包括:处理器,以及与所述处理器通信连接的存储器和收发器;

15、所述存储器存储计算机执行指令;所述收发器,用于收发数据;

16、所述处理器执行所述存储器存储的计算机执行指令,以实现如上述第一方面或任一种方式所述的方法。

17、第四方面,本申请提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现上述第一方面或任一种方式所述的方法。

18、本申请提供的代码处理方法、装置、电子设备及存储介质,该方法通过获取应用程序的执行参数涉及的jar包,并对jar包进行预处理,得到jar包中涉及继承的类名、类与实现相关的信息、类与继承相关的信息,并根据涉及继承的类名、类与继承相关的信息,确定涉及继承的类中父类的方法与子类的方法之间的调用关系,之后根据类与实现相关的信息,确定接口调用实现类的方法的调用关系,最后输出父类的方法与子类的方法之间的调用关系,和接口调用实现类的方法的调用关系。该技术方案中根据接口与类之间的继承与实现关系,构建接口与实现类之间,子类与父类之间的实现/继承关系树,结合各接口与类中实现的方法信息,获得未包含在方法调用指令中的接口到实现类、父类到子类、子类到父类的方法调用关系。最终能够通过代码静态分析的方式,不需要执行代码,就能获取代码实际运行时涉及继承与实现的方法调用关系,以使得获取到的方法调用关系与代码实际运行时更接近,结果更准确。



技术特征:

1.一种代码处理方法,其特征在于,包括:

2.根据权利要求1所述的方法,其特征在于,所述类与实现相关的信息包括:所述类中实现接口的方法、以及所述接口中被类实现的方法;

3.根据权利要求2所述的方法,其特征在于,对所述jar包进行预处理,得到所述类与继承相关的信息,包括:

4.根据权利要求3所述的方法,其特征在于,所述根据所述涉及继承的类名、所述类与继承相关的信息,确定所述涉及继承的类中父类的方法与子类的方法之间的调用关系,包括:

5.根据权利要求4所述的方法,其特征在于,所述根据所有所述第一全部方法信息和所有所述第二全部方法信息,确定所述父类的方法与子类的方法之间的调用关系,包括:

6.根据权利要求4所述的方法,其特征在于,所述根据所述类与实现相关的信息,确定接口调用实现类的方法的调用关系,包括:

7.根据权利要求1-6任一项所述的方法,其特征在于,在所述根据所述涉及继承的类名、所述类与继承相关的信息,确定所述涉及继承的类中父类的方法与子类的方法之间的调用关系之前,所述方法还包括:

8.根据权利要求7所述的方法,其特征在于,所述输出所述父类的方法与子类的方法之间的调用关系,和所述接口调用实现类的方法的调用关系,包括:

9.一种代码处理装置,其特征在于,包括:

10.一种电子设备,其特征在于,包括:处理器,以及与所述处理器通信连接的存储器;

11.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现如上述权利要求1至8任一项所述的方法。


技术总结
本申请提供一种代码处理方法、装置、电子设备及存储介质,该方法通过获取应用程序的执行参数涉及的jar包,并对jar包进行预处理,得到jar包中涉及继承的类名、类与实现相关的信息、类与继承相关的信息,并根据涉及继承的类名、类与继承相关的信息,确定涉及继承的类中父类的方法与子类的方法之间的调用关系,之后根据类与实现相关的信息,确定接口调用实现类的方法的调用关系,最后输出父类的方法与子类的方法之间的调用关系,和接口调用实现类的方法的调用关系。该技术方案能够通过代码静态分析的方式,不需要执行代码,就能获取代码实际运行时涉及继承与实现的方法调用关系,使得获取到的方法调用关系与代码实际运行时更接近,结果更准确。

技术研发人员:郑祎
受保护的技术使用者:深圳前海微众银行股份有限公司
技术研发日:
技术公布日:2024/1/12
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1