跨语言软件源代码的综合依赖关系分析制造技术

技术编号:37502570 阅读:12 留言:0更新日期:2023-05-07 09:38
本发明专利技术提供一种跨语言软件源代码的综合依赖关系分析,包括在目标代码文件中插入依赖检测代码,通过所述依赖检测代码获取所述目标代码文件中所有的数据访问信息;若所述数据访问信息中两个不同的类信息访问同一内存,则分别提取所述两个不同的类信息的变量信息和控制逻辑信息,并基于所述变量信息和所述控制逻辑信息生成对应的代码流程图;基于预设的图相似度检测算法确定不同代码流程图的相似度,若所述相似度符合预设相似度阈值,则基于所述代码流程图的节点引用关系以及连接边的类别,确定所述目标代码文件中的数据依赖关系和函数依赖关系。本发明专利技术的方法能够获取多个层面的依赖关系,从而为架构分析,质量保障提供数据支撑。撑。撑。

【技术实现步骤摘要】
跨语言软件源代码的综合依赖关系分析


[0001]本专利技术涉及软件开发
,尤其涉及一种跨语言软件源代码的综合依赖关系分析。

技术介绍

[0002]现有跨语言代码依赖关系检测主要包括基于中间特征的检测方法,基于中间特征的方法将不同语言编写的代码转换为某一种中间特征,如中间语言或基于树的中间表示,然后基于中间表示直接度量两段代码的相似度。这类方法忽略了代码的结构特征,且对编译器的依赖性较强,并且计算代价较高。

技术实现思路

[0003]本专利技术实施例的第一方面,提供一种跨语言软件源代码的综合依赖关系分析方法,包括:在目标代码文件中插入依赖检测代码,通过所述依赖检测代码获取所述目标代码文件中所有的数据访问信息,其中,所述数据访问信息包括读操作信息和写操作信息;若所述数据访问信息中两个不同的类信息访问同一内存,则分别提取所述两个不同的类信息的变量信息和控制逻辑信息,并基于所述变量信息和所述控制逻辑信息生成对应的代码流程图,其中,所述代码流程图包括所述变量信息对应的节点以及所述控制逻辑信息对应的连接边;基于预设的图相似度检测算法确定不同代码流程图的相似度,若所述相似度符合预设相似度阈值,则基于所述代码流程图的节点引用关系以及连接边的类别,确定所述目标代码文件中的数据依赖关系和函数依赖关系。
[0004]在一种可选的实施方式中,所述在目标代码文件中插入依赖检测代码,通过所述依赖检测代码获取所述目标代码文件中所有的数据访问信息包括:在所述目标代码文件的每个函数的每条读写指令均进行插桩,获取所述目标代码文件的运行代码的访问足迹信息,其中,所述访问足迹信息包括所述运行代码访问地址所处的文件名、文件行号、变量名称、变量长度以及本次读写所发生的迭代次数中至少一种信息;将所述访问足迹信息转换成字符串信息,通过向前遍历指令,在预设运行数据库中获取与所述字符串信息中的关键词对应的读操作信息和写操作信息。
[0005]在一种可选的实施方式中,所述基于所述变量信息和所述控制逻辑信息生成对应的代码流程图包括:将所述变量信息转化为所述代码流程图的节点信息,并判断所述变量信息在所述类信息中是否首次出现,若是,则将所述变量信息作为父节点,若否,则根据所述控制逻辑信息将所述变量信息连接至对应的父节点,将所述代码流程图的节点信息存储在节点队列
空间中;将所述控制逻辑信息转化为所述代码流程图的连接边信息,并基于对应节点间的控制逻辑连接对应的节点,生成初始连通图;基于预设节点匹配函数,遍历所述节点队列空间中所有节点,将所述节点队列空间中的每一个节点与所述初始连通图中的任一节点进行匹配,若匹配,则保留所述初始连通图中匹配的节点,若不匹配,则将不匹配的节点从所述初始连通图中移除,得到所述代码流程图。
[0006]在一种可选的实施方式中,所述基于所述变量信息和所述控制逻辑信息生成对应的代码流程图之后,所述方法还包括:判断所述代码流程图中相邻节点是否存在逻辑关系,其中,所述逻辑关系包括数据依赖关系和控制依赖关系中至少一种;若存在逻辑关系,则保持相邻节点在所述代码流程图中的位置,若不存在逻辑关系,则将所述相邻节点进行合并;和/或确定所述代码流程图中连接边构成的环路,并将涉及所述环路最多类型的连接边进行删除。
[0007]在一种可选的实施方式中,所述基于预设的图相似度检测算法确定不同代码流程图的相似度包括:将所述代码流程图中的节点映射为节点特征,并根据所述代码流程图中的节点类型设置节点权重,将所述代码流程图中的连接边映射为邻接矩阵;根据所述节点特征、所述节点权重,以及所述邻接矩阵,通过最小平均贴近度算法确定不同代码流程图的相似度,其中,所述确定不同代码流程图的相似度如下公式所示:
[0008]其中,Sim(A,B)表示不同代码流程图的相似度,A、B分别表示不同代码流程图对应的向量表示集合,v
i
、v
j
分别表示不同代码流程图的节点特征,E表示节点特征的维度,u
i
、u
j
分别表示不同代码流程图的节点特征对应的节点权重,L
i
、L
j
分别表示不同代码流程图中的连接边,map(.)表示邻接矩阵转换函数,f(.)表示向量转换函数。
[0009]在一种可选的实施方式中,所述基于所述代码流程图的节点引用关系以及连接边的类别,确定所述目标代码文件中的数据依赖关系和函数依赖关系包括:根据所述代码流程图的节点引用关系,将所述代码流程图中被引用的节点作为根节点,将引用的节点作为子节点;所述连接边根据所述控制逻辑信息的类别分为第一连接边和第二连接边,所述第一连接边用于指示所连接的两个节点之间存在数据依赖关系,所述第二连接边用于指示所连接的两个节点之间存在函数依赖关系;将与所述根节点相连的多个所述子节点,以及连接所述根节点与所述子节点的连
接边构建多个依赖调用树,将共享同一内存的依赖调用树合并为依赖调用全集,根据所述依赖调用全集的节点流向确定所述函数依赖关系,根据所述依赖调用全集的内存访问指向确定所述数据依赖关系。
[0010]本专利技术实施例的第二方面,提供一种跨语言软件源代码的综合依赖关系分析系统,包括:第一单元,用于在目标代码文件中插入依赖检测代码,通过所述依赖检测代码获取所述目标代码文件中所有的数据访问信息,其中,所述数据访问信息包括读操作信息和写操作信息;第二单元,用于若所述数据访问信息中两个不同的类信息访问同一内存,则分别提取所述两个不同的类信息的变量信息和控制逻辑信息,并基于所述变量信息和所述控制逻辑信息生成对应的代码流程图,其中,所述代码流程图包括所述变量信息对应的节点以及所述控制逻辑信息对应的连接边;第三单元,用于基于预设的图相似度检测算法确定不同代码流程图的相似度,若所述相似度符合预设相似度阈值,则基于所述代码流程图的节点引用关系以及连接边的类别,确定所述目标代码文件中的数据依赖关系和函数依赖关系。
[0011]本专利技术实施例的第三方面,提供一种跨语言软件源代码的综合依赖关系分析设备,包括:处理器;用于存储处理器可执行指令的存储器;其中,所述处理器被配置为调用所述存储器存储的指令,以执行前述所述的方法。
[0012]本专利技术实施例的第四方面,提供一种计算机可读存储介质,其上存储有计算机程序指令,所述计算机程序指令被处理器执行时实现前述所述的方法。
[0013]本专利技术提供一种跨语言软件源代码的综合依赖关系分析方法,在目标代码文件中插入依赖检测代码,通过所述依赖检测代码获取所述目标代码文件中所有的数据访问信息,实现在监控读写操作的同时获取读写地址,可以实时获取目标代码文件的依赖关系,并且能够实现对依赖关系的动态追踪。
[0014]在两个不同的类信息访问同一内存时,可以基于所述变量信息和所述控制逻辑信息生成对应的代码流程图,代码流程图能够清晰且直观地表示算法的执行流程和程序结构的图形表示,不同编程语言如果直接使用现有的转换代码为流程图的方法或工具,则会导致具有相同流程但使用不同语言编写的代码转换得到本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种跨语言软件源代码的综合依赖关系分析方法,其特征在于,包括:在目标代码文件中插入依赖检测代码,通过所述依赖检测代码获取所述目标代码文件中所有的数据访问信息,其中,所述数据访问信息包括读操作信息和写操作信息;若所述数据访问信息中两个不同的类信息访问同一内存,则分别提取所述两个不同的类信息的变量信息和控制逻辑信息,并基于所述变量信息和所述控制逻辑信息生成对应的代码流程图,其中,所述代码流程图包括所述变量信息对应的节点以及所述控制逻辑信息对应的连接边;基于预设的图相似度检测算法确定不同代码流程图的相似度,若所述相似度符合预设相似度阈值,则基于所述代码流程图的节点引用关系以及连接边的类别,确定所述目标代码文件中的数据依赖关系和函数依赖关系。2.根据权利要求1所述的方法,其特征在于,所述在目标代码文件中插入依赖检测代码,通过所述依赖检测代码获取所述目标代码文件中所有的数据访问信息包括:在所述目标代码文件的每个函数的每条读写指令均进行插桩,获取所述目标代码文件的运行代码的访问足迹信息,其中,所述访问足迹信息包括所述运行代码访问地址所处的文件名、文件行号、变量名称、变量长度以及本次读写所发生的迭代次数中至少一种信息;将所述访问足迹信息转换成字符串信息,通过向前遍历指令,在预设运行数据库中获取与所述字符串信息中的关键词对应的读操作信息和写操作信息。3.根据权利要求1所述的方法,其特征在于,所述基于所述变量信息和所述控制逻辑信息生成对应的代码流程图包括:将所述变量信息转化为所述代码流程图的节点信息,并判断所述变量信息在所述类信息中是否首次出现,若是,则将所述变量信息作为父节点,若否,则根据所述控制逻辑信息将所述变量信息连接至对应的父节点,将所述代码流程图的节点信息存储在节点队列空间中;将所述控制逻辑信息转化为所述代码流程图的连接边信息,并基于对应节点间的控制逻辑连接对应的节点,生成初始连通图;基于预设节点匹配函数,遍历所述节点队列空间中所有节点,将所述节点队列空间中的每一个节点与所述初始连通图中的任一节点进行匹配,若匹配,则保留所述初始连通图中匹配的节点,若不匹配,则将不匹配的节点从所述初始连通图中移除,得到所述代码流程图。4.根据权利要求1所述的方法,其特征在于,所述基于所述变量信息和所述控制逻辑信息生成对应的代码流程图之后,所述方法还包括:判断所述代码流程图中相邻节点是否存在逻辑关系,其中,所述逻辑关系包括数据依赖关系和控制依赖关系中至少一种;若存在逻辑关系,则保持相邻节点在所述代码流程图中的位置,若不存在逻辑关系,则将所述相邻节点进行合并;和/或确定所述代码流程图中连接边构成的环路,并将涉及所述环路最多类型的连接边进行删除。5.根据权利要求1所述的方法,其特征在于,所述基于预设的图相似度检测算法确定不
同代码流程图的相似度包括:将所述代码流程图中的节点映射为节点特征,并根据所述代码流程图中的节...

【专利技术属性】
技术研发人员:李洪胡鹤轩张鹏程谭国平胡强
申请(专利权)人:南京优测信息科技有限公司
类型:发明
国别省市:

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

1