本申请涉及面向对象编程,尤其涉及代码动态绑定分析方法、装置、设备以及存储介质。
背景技术:
1、在面向对象的语言中,当子类重写了父类的方法,并且这些重写的方法在代码中通过父类的类型引用被调用,静态代码分析在尝试查找特定子类重写方法的直接调用时,可能无法直接识别出调用时实际会绑定到哪个子类的具体实现,因为这一决定是在运行时通过动态绑定过程做出的。
2、因此,在尝试通过静态分析来查找特定子类重写方法的直接调用时,若这些方法调用是通过父类类型的引用来进行的,静态分析工具往往无法直接定位到与具体子类实现相关联的调用点。这是因为静态分析只能揭示出方法调用时使用的引用类型,而无法预测或确定在运行时实际会执行哪个子类的重写版本。只有当直接使用子类类型的引用来调用方法时,静态分析才可能更直接地关联到具体的子类实现,但这并不总是可能的,特别是当存在复杂的多态和继承关系时。
技术实现思路
1、本申请的主要目的在于提供一种代码动态绑定分析方法、装置、设备以及存储介质,旨在解决如何提高识别面向对象动态绑定调用的准确性的技术问题。
2、为实现上述目的,本申请提出一种代码动态绑定分析方法,所述方法包括:
3、提取预设格式的代码对应的父类方法,并递归查询所述父类方法的调用点;
4、识别并分析所述父类方法的调用点相关的子类方法的调用点;
5、结合所述子类方法的调用点与初始查询的直接调用点,获取完整的调用信息。
6、在一实施例中,所述提取预设格式的代码对应的父类方法,并递归查询所述父类方法的调用点的步骤之前,包括:
7、通过扫描引擎识别源代码,并启动相应的解析器或编译器;
8、通过所述解析器或所述编译器将所述源代码转换为预设格式的代码。
9、在一实施例中,所述提取预设格式的代码对应的父类方法,并递归查询所述父类方法的调用点的步骤之前,还包括:
10、查询预设格式的代码的直接调用位置,获取初始查询的直接调用点。
11、在一实施例中,所述提取预设格式的代码语言对应的父类方法,并通过递归查询所述父类方法的调用点步骤包括:
12、分析预设格式的代码语中特定方法所在类的声明,以识别特定方法对应的接口信息;
13、基于所接口信息,递归查询特定方法相匹配的父类方法,并获取所述父类方法的调用点。
14、在一实施例中,所述识别并分析所述父类方法的调用点相关的子类方法的调用点的步骤包括:
15、对父类方法的调用点进行过滤,得到与所述父类方法的调用点相关的子类方法的调用点;
16、对所述子类方法的调用点进行分析,确定所述子类方法的调用点中赋值语句中的对象类型。
17、在一实施例中,所述对所述子类方法的调用点进行分析,确定所述子类方法的调用点中赋值语句和初始化语句中的对象类型的步骤之后,还包括:
18、基于所述子类方法的调用点中赋值语句中的对象类型,确认子类方法的间接调用点;
19、验证所述子类方法的间接调用点是否指向子类方法重写或实现的具体方法;
20、若是,则将所述子类方法的间接调用点作为所述子类方法的有效间接作用点。
21、在一实施例中,所述结合所述子类方法的调用点与初始查询的直接调用点,获取完整的调用信息的步骤包括:
22、将所述子类方法的有效间接作用点与初始查询的直接调用点进行合并,形成完整的调用信息。
23、此外,为实现上述目的,本申请还提出一种代码动态绑定分析装置,所述代码动态绑定分析装置包括:
24、查询模块,用于提取预设格式的代码对应的父类方法,并递归查询所述父类方法的调用点;
25、分析模块,用于识别并分析所述父类方法的调用点相关的子类方法的调用点;
26、获取模块,用于结合所述子类方法的调用点与初始查询的直接调用点,获取完整的调用信息。
27、此外,为实现上述目的,本申请还提出一种代码动态绑定分析设备,所述设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序配置为实现如上文所述的代码动态绑定分析方法的步骤。
28、此外,为实现上述目的,本申请还提出一种存储介质,所述存储介质为计算机可读存储介质,所述存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上文所述的代码动态绑定分析方法的步骤。
29、此外,为实现上述目的,本申请还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序被处理器执行时实现如上文所述的代码动态绑定分析方法的步骤。
30、本申请实施例提供一种代码动态绑定分析方法、装置、设备以及存储介质,该方法包括:提取预设格式的代码对应的父类方法,并递归查询所述父类方法的调用点;识别并分析所述父类方法的调用点相关的子类方法的调用点;结合所述子类方法的调用点与初始查询的直接调用点,获取完整的调用信息。该方法通过递归查询机制确保了所有相关的动态绑定调用都被准确捕获,并且结合数据流分析和类型验证技术,在一定程度上减少了误报和漏报的可能性,从而显著提高了对动态绑定方法调用的识别准确性。
1.一种代码动态绑定分析方法,其特征在于,所述方法包括:
2.如权利要求1所述的方法,其特征在于,所述提取预设格式的代码对应的父类方法,并递归查询所述父类方法的调用点的步骤之前,包括:
3.如权利要求1所述的方法,其特征在于,所述提取预设格式的代码对应的父类方法,并递归查询所述父类方法的调用点的步骤之前,还包括:
4.如权利要求1所述的方法,其特征在于,所述提取预设格式的代码语言对应的父类方法,并通过递归查询所述父类方法的调用点步骤包括:
5.如权利要求1所述的方法,其特征在于,所述识别并分析所述父类方法的调用点相关的子类方法的调用点的步骤包括:
6.如权利要求5所述的方法,其特征在于,所述基于所述对象类型,识别并验证子类方法的间接调用点,以确认子类方法的间接调用点的有效性的步骤包括:
7.如权利要求3至6中任一项所述的方法,其特征在于,所述结合所述子类方法的调用点与初始查询的直接调用点,获取完整的调用信息的步骤包括:
8.一种代码动态绑定分析装置,其特征在于,所述装置包括:
9.一种代码动态绑定分析设备,其特征在于,所述设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序配置为实现如权利要求1至7中任一项所述的代码动态绑定分析方法的步骤。
10.一种存储介质,其特征在于,所述存储介质为计算机可读存储介质,所述存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至7中任一项所述的代码动态绑定分析方法的步骤。