代码函数调用方法及装置制造方法及图纸

技术编号:38461174 阅读:6 留言:0更新日期:2023-08-11 14:38
本申请实施例提供一种代码函数调用方法及装置,涉及知识图谱领域,也可用于金融领域,方法包括:将源代码转换为控制流图,对所述控制流图进行路径遍历,根据所述路径遍历的结果构建函数节点;将所述函数节点与所述源代码的函数调用图中的各节点进行关联绑定,得到函数调用知识图谱;根据所述函数调用知识图谱确定代码函数之间的进入条件;本申请能够准确确定代码之间的依赖关系。代码之间的依赖关系。代码之间的依赖关系。

【技术实现步骤摘要】
代码函数调用方法及装置


[0001]本申请涉及知识图谱领域,也可用于金融领域,具体涉及一种代码函数调用方法及装置。

技术介绍

[0002]随着软件的迭代更新,系统代码量的指数级增长,分析代码之间的依赖关系对代码维护、低效代码退出、系统技术升级改造都有着非常重要的意义。
[0003]现有的代码依赖关系分析工具主要是生成代码的函数调用图,然后基于函数调用图通过图的遍历算法无条件搜索函数之间的调用关系。
[0004]专利技术人发现,现有技术中,基于函数调用图分析函数之间的调用关系往往只是单纯的从图上进行搜索,无法推断到达某个函数的具体条件,搜索结果比较粗糙。基于函数调用图分析函数之间的调用关系仅最细只能拿到函数层面的粒度,对于每个函数中可能会有if、for、switch等跳转语句会将代码分割成多个代码块,函数调用图无法分析代码块层面的依赖关系。

技术实现思路

[0005]针对现有技术中的问题,本申请提供一种代码函数调用方法及装置,能够准确确定代码之间的依赖关系。
[0006]为了解决上述问题中的至少一个,本申请提供以下技术方案:
[0007]第一方面,本申请提供一种代码函数调用方法,包括:
[0008]将源代码转换为控制流图,对所述控制流图进行路径遍历,根据所述路径遍历的结果构建函数节点;
[0009]将所述函数节点与所述源代码的函数调用图中的各节点进行关联绑定,得到函数调用知识图谱;
[0010]根据所述函数调用知识图谱确定代码函数之间的进入条件。<br/>[0011]进一步地,所述将源代码转换为控制流图,对所述控制流图进行路径遍历,根据所述路径遍历的结果构建函数节点,包括:
[0012]根据设定条件跳转语句对源代码进行划分,将经过划分后得到的中间代码转换为控制流图;
[0013]根据预设深度优先搜索算法对所述控制流图进行路径遍历,确定各所述中间代码之间的跳转关系,并根据所述跳转关系构建函数节点。
[0014]进一步地,所述将所述函数节点与所述源代码的函数调用图中的各节点进行关联绑定,得到函数调用知识图谱,包括:
[0015]对所述源代码的代码二进制文件进行解析,确定对应的函数调用图;
[0016]根据所述源代码中各函数的函数标识将所述函数节点与所述函数调用图中的各节点进行关联绑定,得到函数调用知识图谱。
[0017]进一步地,在所述得到函数调用知识图谱之后,包括:
[0018]判断所述函数调用图中是否存在递归调用的环结构;
[0019]若是,则将所述环结构解构并转换为相应的树结构。
[0020]进一步地,所述将所述环结构解构并转换为相应的树结构,包括:
[0021]将所述环结构中的所有节点作为树结构的起始节点,将所述环结构的前置节点作为所述树结构的结尾节点,得到多个树结构。
[0022]进一步地,所述根据所述函数调用知识图谱确定代码函数之间的进入条件,包括:
[0023]根据所述函数调用知识图谱依次获取相邻两代码函数之间的调用关系;
[0024]根据所述调用关系确定所述代码函数在全调用路径上的函数可达条件。
[0025]第二方面,本申请提供一种代码函数调用装置,包括:
[0026]函数节点构建模块,用于将源代码转换为控制流图,对所述控制流图进行路径遍历,根据所述路径遍历的结果构建函数节点;
[0027]知识图谱构建模块,用于将所述函数节点与所述源代码的函数调用图中的各节点进行关联绑定,得到函数调用知识图谱;
[0028]进入条件判断模块,用于根据所述函数调用知识图谱确定代码函数之间的进入条件。
[0029]进一步地,所述函数节点构建模块包括:
[0030]控制流图确定单元,用于根据设定条件跳转语句对源代码进行划分,将经过划分后得到的中间代码转换为控制流图;
[0031]跳转关系确定单元,用于根据预设深度优先搜索算法对所述控制流图进行路径遍历,确定各所述中间代码之间的跳转关系,并根据所述跳转关系构建函数节点。
[0032]进一步地,所述知识图谱构建模块包括:
[0033]函数调用图确定单元,用于对所述源代码的代码二进制文件进行解析,确定对应的函数调用图;
[0034]节点关联单元,用于根据所述源代码中各函数的函数标识将所述函数节点与所述函数调用图中的各节点进行关联绑定,得到函数调用知识图谱。
[0035]进一步地,所述知识图谱构建模块还包括:
[0036]环结构判断单元,用于判断所述函数调用图中是否存在递归调用的环结构;
[0037]环结构转换单元,用于若是,则将所述环结构解构并转换为相应的树结构。
[0038]进一步地,所述环结构转换单元包括:
[0039]树结构扩展子单元,用于将所述环结构中的所有节点作为树结构的起始节点,将所述环结构的前置节点作为所述树结构的结尾节点,得到多个树结构。
[0040]进一步地,所述进入条件判断模块包括:
[0041]调用关系确定单元,用于根据所述函数调用知识图谱依次获取相邻两代码函数之间的调用关系;
[0042]可达条件确定单元,用于根据所述调用关系确定所述代码函数在全调用路径上的函数可达条件。
[0043]第三方面,本申请提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现所述的代码函数调用方法
的步骤。
[0044]第四方面,本申请提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现所述的代码函数调用方法的步骤。
[0045]第五方面,本申请提供一种计算机程序产品,包括计算机程序/指令,该计算机程序/指令被处理器执行时实现所述的代码函数调用方法的步骤。
[0046]由上述技术方案可知,本申请提供一种代码函数调用方法及装置,通过将源代码转换为控制流图,对所述控制流图进行路径遍历,根据所述路径遍历的结果构建函数节点;将所述函数节点与所述源代码的函数调用图中的各节点进行关联绑定,得到函数调用知识图谱;根据所述函数调用知识图谱确定代码函数之间的进入条件,由此能够准确确定代码之间的依赖关系。
附图说明
[0047]为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0048]图1为本申请实施例中的代码函数调用方法的流程示意图之一;
[0049]图2为本申请实施例中的代码函数调用方法的流程示意图之二;
[0050]图3为本申请实施例中的代码函数调用方法的流程示意图之三;
[0051]图4为本申请实施例中的代码函数调用方法的流程示意图之四;...

【技术保护点】

【技术特征摘要】
1.一种代码函数调用方法,其特征在于,所述方法包括:将源代码转换为控制流图,对所述控制流图进行路径遍历,根据所述路径遍历的结果构建函数节点;将所述函数节点与所述源代码的函数调用图中的各节点进行关联绑定,得到函数调用知识图谱;根据所述函数调用知识图谱确定代码函数之间的进入条件。2.根据权利要求1所述的代码函数调用方法,其特征在于,所述将源代码转换为控制流图,对所述控制流图进行路径遍历,根据所述路径遍历的结果构建函数节点,包括:根据设定条件跳转语句对源代码进行划分,将经过划分后得到的中间代码转换为控制流图;根据预设深度优先搜索算法对所述控制流图进行路径遍历,确定各所述中间代码之间的跳转关系,并根据所述跳转关系构建函数节点。3.根据权利要求1所述的代码函数调用方法,其特征在于,所述将所述函数节点与所述源代码的函数调用图中的各节点进行关联绑定,得到函数调用知识图谱,包括:对所述源代码的代码二进制文件进行解析,确定对应的函数调用图;根据所述源代码中各函数的函数标识将所述函数节点与所述函数调用图中的各节点进行关联绑定,得到函数调用知识图谱。4.根据权利要求1所述的代码函数调用方法,其特征在于,在所述得到函数调用知识图谱之后,包括:判断所述函数调用图中是否存在递归调用的环结构;若是,则将所述环结构解构并转换为相应的树结构。5.根据权利要求4所述的代码函数调用方法,其特征在于,所述将所述环结构解构...

【专利技术属性】
技术研发人员:靳辉陈亮
申请(专利权)人:中国工商银行股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1