本说明书涉及计算机,尤其涉及一种针对静态代码的调用图分析方法、装置以及设备。
背景技术:
1、目前,静态代码分析使用的调用图(call graph)是普通有向图,这种图在生产的时候是包含图根的,看起来和树有些类似,当使用其中某一个节点在图中进行探索时,会发现有的节点在相对于图根的不同路径探索的子图是会存在不同的,但是,普通有向图是统一的聚合图,无法表达这种不同,相应地会造成探索了错误的边,使得静态分析出现噪音,也会使得分析的性能下降。
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、本说明书一个或多个实施例采用的上述至少一个技术方案能够达到以下有益效果:在树形的调用图中实现了树的路径敏感,对于重复节点不进行聚合,能够充分保留从图根到任意的同一节点可能存在的多条不同路径,避免了聚合节点可能会误导探索时走向实际无法到达的路径上,有助于降低分析过程中的子图遍历复杂度,有助于提高最终分析结果的覆盖度和准确度。
1.一种针对静态代码的调用图分析方法,包括:
2.如权利要求1所述的方法,所述探索所述探索起点对应的传播路径之前,所述方法还包括:
3.如权利要求1所述的方法,所述根据所述探索起点的入度与出度,在所述非聚合调用图中确定目标子图,具体包括:
4.如权利要求1或3所述的方法,所述根据所述目标子图,探索所述探索起点对应的传播路径,具体包括:
5.如权利要求4所述的方法,所述根据所述目标子图,探索所述探索起点对应的传播路径,具体包括:
6.如权利要求4所述的方法,所述根据所述目标子图,探索所述探索起点对应的传播路径,具体包括:
7.如权利要求1所述的方法,所述根据所述目标子图,探索所述探索起点对应的传播路径,具体包括:
8.如权利要求1所述的方法,所述探索起点为指定的污点的起点;
9.如权利要求1所述的方法,所述探索起点在所述非聚合调用图中有多个重复的节点。
10.如权利要求1所述的方法,所述图根表示所述静态代码中的函数,所述节点表示静态代码中的函数或语句。
11.一种针对静态代码的调用图分析装置,包括:
12.如权利要求11所述的装置,还包括:
13.如权利要求11所述的装置,所述传播路径探索模块,确定所述探索起点的出度在所述非聚合调用图中对应的子图;
14.如权利要求11或13所述的装置,所述传播路径探索模块,在所述非聚合调用图中指定一个或多个节点作为探索终点;
15.如权利要求14所述的装置,所述传播路径探索模块,若当前探索节点与已探索过的节点重复,则确定所述当前探索节点对应的探索起点;
16.如权利要求14所述的装置,所述传播路径探索模块,确定在所述非聚合调用图中指定的函数转换节点;
17.如权利要求11所述的装置,所述传播路径探索模块,根据所述目标子图,按照指定的探索次数,探索所述探索起点对应的传播路径,直至所述探索次数用尽,所述探索次数中的每一次分别用于向当前探索节点的入度或出度方向移动一跳距离。
18.如权利要求11所述的装置,所述探索起点为指定的污点的起点;
19.如权利要求11所述的装置,所述探索起点在所述非聚合调用图中有多个重复的节点。
20.如权利要求11所述的装置,所述图根表示所述静态代码中的函数,所述节点表示静态代码中的函数或语句。
21.一种针对静态代码的调用图分析设备,包括: