System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及程序相似性,特别涉及一种基于语义增强ast的源代码相似性分析方法及系统。
技术介绍
1、利用不同编程语言间的api语义以及部分token特征虽然能够进行相似性检测,但这些特征仅反映了函数词法层面的相似性,并没有对函数的语义进行相似性判断。因此仅通过源代码词法层面分析来检测跨语言代码克隆时并不能达到较好的效果。为了更准确地检测跨语言代码克隆,进一步探索函数之间的语法、语义和结构等特征关系,从而更全面地评估两个函数之间的相似性。
2、抽象语法树(ast)以树形结构表示了代码的语法和结构特征。对于使用不同语言实现的相似函数,它们的语法和结构特征具有一定的相似性。但是ast并不能感知程序的语义,使得基于ast的方法并不能识别具有不同语法但语义相似的程序。基于图的方法可以通过构建程序依赖图(program dependence graph,pdg)来表示代码,pdg同时包含了数据依赖与控制依赖,可以通过发现同构子图来预测语义上的相似性。虽然基于图的方法在相似性检测中具有较高的准确率等,但由于这种表示需要捕获更加细粒度的细节,因此在跨语言程序检测时表现不佳。除此之外,由于不同编程语言使用的词法不同,相同类型的节点也具有不同的名称,这些都使得跨语言函数难以生成良好的通用表示。
技术实现思路
1、本专利技术的目的是解决现有技术中存在的问题,提出一种基于语义增强ast的源代码相似性分析方法及系统,能够实现不同编程语言函数的相似性判断,检测效果达到高准确率的同时提升检测的效率
2、为实现上述目的,所采取的技术方案是:
3、一种基于语义增强ast的源代码相似性分析方法,包含:
4、对于两个使用不同编程语言的函数分别生成对应的抽象语法树ast;
5、利用节点词汇表使得不同编程语言ast中类型相同但名称不同的节点具有相同的表示,屏蔽不同编程语言ast的节点表示差异;
6、对节点标准化处理后的ast扩展控制流边和数据流边,生成语义增强ast,该语义增强ast集成了函数的语法、结构和语义信息;
7、设计函数相似性分析网络,结合图卷积网络与注意力机制将语义增强ast转化为图向量,将两个图向量进行拼接后输入全连接神经网络,判断不同编程语言函数的相似性。
8、根据本专利技术基于语义增强ast的源代码相似性分析方法,进一步地,生成节点词汇表的过程为:
9、首先对大量不同编程语言抽象语法树中的所有节点名称进行统计,并根据节点类型进行分类,得到了ast的所有节点名称及类型;
10、然后对相同类型的节点规定统一的名称,生成抽象语法树的节点词汇表,并建立不同编程语言抽象语法树节点名称与节点词汇表名称之间的对应关系;对于节点词汇表中名称的制定规则需要保证词汇表中的统一名称不会与抽象语法树中不同节点类型的原始名称冲突。
11、根据本专利技术基于语义增强ast的源代码相似性分析方法,进一步地,利用节点词汇表使得不同编程语言ast中类型相同但名称不同的节点具有相同的表示包含:
12、首先对ast中的所有节点名称进行遍历,若节点名称属于节点词汇表中的节点名称,则将该名称映射到表中的统一名称进行替换;若节点名称不属于节点词汇表中的节点名称,则使用“unk”字符替代,最终使得不同编程语言函数的抽象语法树中的所有相同类型的节点名称具有相同名称。
13、根据本专利技术基于语义增强ast的源代码相似性分析方法,进一步地,对节点标准化处理后的ast扩展控制流边包括:
14、ast的每个节点代表源代码中的一个语句,根据ast节点名称识别函数语句类型;
15、在ast中,根据语句类型找出具有相同父节点的代码语句;
16、基于节点在ast中的位置,按照在源代码中出现的顺序连接上述父节点与子节点;
17、当节点内容是转移控制语句时,根据转移控制语句语义来更新语句之间的关系,最终得到在ast中添加的所有控制流边。
18、根据本专利技术基于语义增强ast的源代码相似性分析方法,进一步地,对节点标准化处理后的ast扩展数据流边包括:
19、首先遍历ast,收集所有变量的定义和使用信息;
20、建立变量的定义与使用信息之间的链接,将每个定义与使用关联起来;
21、构建use-def链:每个链从变量的一个使用开始,追溯到该使用对应的定义,然后再继续追溯到该定义的其他使用,直至完成整个抽象语法树的遍历,通过去除冗余链或合并重复的链,最终得到了一个链接所有相关使用和定义的链。
22、根据本专利技术基于语义增强ast的源代码相似性分析方法,进一步地,结合图卷积网络与注意力机制将语义增强ast转化为图向量分为节点嵌入阶段和图向量生成阶段,在节点嵌入阶段,利用图卷积网络通过邻居聚合的方式对语义增强ast的节点特征向量进行更新;在图向量生成阶段,根据不同节点在相似性判断的重要性不同,利用注意力机制将更新后的节点特征向量进行加权,从而生成图向量。
23、根据本专利技术基于语义增强ast的源代码相似性分析方法,进一步地,在节点嵌入阶段,首先将语义增强ast中的所有节点使用one-hot进行编码后,得到了节点的初始化向量矩阵为其中n表示图中的节点数,f表示每个节点的特征向量维度,表示图中节点的初始化向量;之后采用图卷积网络gcn更新节点的特征向量,在利用gcn进行节点特征传播过程中,每个ast节点都融合当前节点与其邻居节点的特征信息,并在不同层数卷积过程中逐步融合了图的局部特征,最终得到更新后的节点特征向量集合
24、
25、根据本专利技术基于语义增强ast的源代码相似性分析方法,进一步地,在图向量生成阶段,根据经过gcn更新后的节点特征向量集合首先对所有节点的向量值进行平均,并使用一个非线性变换,得到图的全局特征c,c∈rf;然后通过如下公式得到图向量g:
26、
27、式中,f2(·)为sigmoid函数,t是矩阵的转置。
28、根据本专利技术基于语义增强ast的源代码相似性分析方法,进一步地,将两个图向量进行拼接后输入全连接神经网络的输入层,经过隐藏层学习向量之间的复杂关系后,采用sigmoid函数将输出映射为0-1之间的实数,并与设置的相似度阈值比较,若大于阈值,则判断该函数对相似,若小于阈值,则判断该函数对不相似。
29、进一步地,本专利技术还提供一种基于语义增强ast的源代码相似性分析系统,包含:
30、ast生成模块,用于对于两个使用不同编程语言的函数分别生成对应的抽象语法树ast;
31、节点标准化模块,用于利用节点词汇表使得不同编程语言ast中类型相同但名称不同的节点具有相同的表示,屏蔽不同编程语言ast的节点表示差异;
32、语义增强模块,用于对节点标准化处理后的ast扩展控制流边和数据流边,生成语义增强ast,该语义增强ast集成了函数的语本文档来自技高网...
【技术保护点】
1.一种基于语义增强AST的源代码相似性分析方法,其特征在于,包含:
2.根据权利要求1所述的基于语义增强AST的源代码相似性分析方法,其特征在于,生成节点词汇表的过程为:
3.根据权利要求2所述的基于语义增强AST的源代码相似性分析方法,其特征在于,利用节点词汇表使得不同编程语言AST中类型相同但名称不同的节点具有相同的表示包含:
4.根据权利要求1所述的基于语义增强AST的源代码相似性分析方法,其特征在于,对节点标准化处理后的AST扩展控制流边包括:
5.根据权利要求1所述的基于语义增强AST的源代码相似性分析方法,其特征在于,对节点标准化处理后的AST扩展数据流边包括:
6.根据权利要求1所述的基于语义增强AST的源代码相似性分析方法,其特征在于,结合图卷积网络与注意力机制将语义增强AST转化为图向量分为节点嵌入阶段和图向量生成阶段,在节点嵌入阶段,利用图卷积网络通过邻居聚合的方式对语义增强AST的节点特征向量进行更新;在图向量生成阶段,根据不同节点在相似性判断的重要性不同,利用注意力机制将更新后的节点特征向量进行
7.根据权利要求6所述的基于语义增强AST的源代码相似性分析方法,其特征在于,在节点嵌入阶段,首先将语义增强AST中的所有节点使用one-hot进行编码后,得到了节点的初始化向量矩阵为其中N表示图中的节点数,F表示每个节点的特征向量维度,表示图中节点的初始化向量;之后采用图卷积网络GCN更新节点的特征向量,在利用GCN进行节点特征传播过程中,每个AST节点都融合当前节点与其邻居节点的特征信息,并在不同层数卷积过程中逐步融合了图的局部特征,最终得到更新后的节点特征向量集合
8.根据权利要求7所述的基于语义增强AST的源代码相似性分析方法,其特征在于,在图向量生成阶段,根据经过GCN更新后的节点特征向量集合首先对所有节点的向量值进行平均,并使用一个非线性变换,得到图的全局特征c,c∈RF;然后通过如下公式得到图向量g:
9.根据权利要求1所述的基于语义增强AST的源代码相似性分析方法,其特征在于,将两个图向量进行拼接后输入全连接神经网络的输入层,经过隐藏层学习向量之间的复杂关系后,采用sigmoid函数将输出映射为0-1之间的实数,并与设置的相似度阈值比较,若大于阈值,则判断该函数对相似,若小于阈值,则判断该函数对不相似。
10.一种基于语义增强AST的源代码相似性分析系统,其特征在于,包含:
...【技术特征摘要】
1.一种基于语义增强ast的源代码相似性分析方法,其特征在于,包含:
2.根据权利要求1所述的基于语义增强ast的源代码相似性分析方法,其特征在于,生成节点词汇表的过程为:
3.根据权利要求2所述的基于语义增强ast的源代码相似性分析方法,其特征在于,利用节点词汇表使得不同编程语言ast中类型相同但名称不同的节点具有相同的表示包含:
4.根据权利要求1所述的基于语义增强ast的源代码相似性分析方法,其特征在于,对节点标准化处理后的ast扩展控制流边包括:
5.根据权利要求1所述的基于语义增强ast的源代码相似性分析方法,其特征在于,对节点标准化处理后的ast扩展数据流边包括:
6.根据权利要求1所述的基于语义增强ast的源代码相似性分析方法,其特征在于,结合图卷积网络与注意力机制将语义增强ast转化为图向量分为节点嵌入阶段和图向量生成阶段,在节点嵌入阶段,利用图卷积网络通过邻居聚合的方式对语义增强ast的节点特征向量进行更新;在图向量生成阶段,根据不同节点在相似性判断的重要性不同,利用注意力机制将更新后的节点特征向量进行加权,从而生成图向量。
7.根据权利要求6所述的基于语义增强ast的源代码相似性...
【专利技术属性】
技术研发人员:王奕森,井靖,孙祥杰,刘铁铭,林键,杜江,梁辰,白星雨,江子锐,梁思远,
申请(专利权)人:中国人民解放军网络空间部队信息工程大学,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。