[发明专利]基于LLVM的克隆代码检测方法有效
申请号: | 201711274665.1 | 申请日: | 2017-12-06 |
公开(公告)号: | CN107943516B | 公开(公告)日: | 2020-11-13 |
发明(设计)人: | 张迎周;陈星昊;王星;尹秀;赵莲 | 申请(专利权)人: | 南京邮电大学 |
主分类号: | G06F8/75 | 分类号: | G06F8/75;G06F11/36 |
代理公司: | 南京知识律师事务所 32207 | 代理人: | 张芳 |
地址: | 210046 江苏省南京市*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | 本发明提供了一种基于LLVM的克隆代码检测方法,包括预处理步骤,合并映射步骤,提取分片步骤,匹配步骤,汇总步骤。首先对源代码预处理步骤,对源程序通过的前端转换成中间语言,然后对装换后的程序进行程序切片操作,获得中间语句之间的依赖关系,这一操作的获取LLVM IR语言的依赖图。然后对取得的数据进一步处理,获取更加精简的语句关系集。然后使用分割方法将语句集分割,在以分布式对比方法获取克隆代码。本发明中通过切边结果来获得关系集样本,并且保留了语句的特征。本发明将提高代码检测的匹配精度,利用LLVM IR中间语言带来的额外特征性,结合多种匹配方式丰富了匹配方法,实现了更加好的克隆代码检测。 | ||
搜索关键词: | 基于 llvm 克隆 代码 检测 方法 | ||
【主权项】:
基于LLVM的克隆代码检测方法,其特征在于,包括以下步骤:步骤1,源代码预处理:将源代码转换成中间代码;获取中间代码程序依赖关系,计算出中间代码的SDG图;步骤2,合并映射:合并来自同一源语句的多个节点并对节点进行模糊化处理,形成该语句的特征并保留依赖关系;从LLVM的依赖关系中把节点映射到源语句行号;查找每个节点的出方向,使每一条边映射为(行号1,行号2)的形式;步骤3,提取分片:从关系集中选取一个节点,提取其前节点和后节点;提取出当前节点与其前、后节点构成的结构子图分片;发送所述分片到匹配程序作为输入参数;步骤4,匹配:根据每个分片起始点选取待匹配的代码切入位置,利用节点内容的对比来鉴别是否为克隆节点,匹配时主要依据当前节点的前后节点与当前节点的自带特征;如果确定节点内容相同,则匹配到的节点与其前后节点加入候选序列,否则根据相似度大小,从高到低加入候选序列,直到找到所有满足相似度阈值的结果并发送候选序列到汇总程序作为输入参数;步骤5,汇总结果:首先每个节点都接收到候选序列,如果两个相邻的节点,在前节点的候选序列中后节点包含后节点的候选序列中匹配到的节点,后节点的候选序列中包含前节点的候选序列中匹配到的节点,则认为这两个节点之间存在关系,即作为连续的克隆代码,否则不作为连续的克隆代码;递归查找所有连接的边获得最大的关联图;步骤6,选用没有作为起始的边循环步骤5,直到所有边都进行了判断。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京邮电大学,未经南京邮电大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/201711274665.1/,转载请声明来源钻瓜专利网。