《基于 LLVM 克隆代码检测关键技术研究》笔记

32、基于系统依赖图的自动代码克隆检测技术与农业机器人模拟设计 本博客主要介绍了基于系统依赖图(SDG)的自动代码克隆检测技术和农业机器人模拟设计。在代码克隆检测部分,详细分析了几种常见的检测技术,包括基于文本、标记、树、程序依赖图和度量的方法,并提出了一种基于SDG的代码克隆检测算法(CodeCloneSearch),通过DFS遍历和节点比较来识别克隆对。农业机器人部分描述了其结构设计、电路建模、功能实现及模拟过程,展示了机器人在灌溉、播种、收割等农业任务中的应用潜力。最后,博客展望了两种技术的未来发展,提出了在并发编程环境和农业智能化中的应用前景。 阅读详情

最近看了一篇论文《基于 LLVM 克隆代码检测关键技术研究》,觉得有些概念和思路不错,做了些笔记。

本文大纲如下:

1、意义

2、检测等级

3、主流思路

 3.1、基于文本的检测方法

 3.2、基于树的检测方法

 3.3、基于图的检测方法

 3.4、论文思路

1、意义

重复代码的增多会大大降低代码的可维护性。

不恰当的代码重复表明程序设计不良,例如缺少抽象。这会导致程序过长,错误更多,进而难以维护,因为需要人工寻找并修改重复的部分。

当克隆具有软件漏洞的代码时,如果开发人员不知道这样的副本,则克隆的代码中可能会继续存在漏洞。代码重构可以改善许多软件的度量衡标准,例如源代码行数,循环复杂度和耦合度。这可能会缩短编译时间,降低认知负载,减少人为错误,减少被遗忘或被忽视的代码。

减少重复代码量,从而提高代码质量。

2、检测等级

Type-1:代码除了空格、注释以外都与源程序都相同;

Type-2:在级别1 基础上,代码片段的变量名、常量、类名等标识符不同,但是语法结构相同;

Type-3:在级别 2 的基础上,改变、删除、增加程序的执行语句,但是程序大体结构基本不变;

Type-4:两段代码能实现相同的功能,在相同的输入值的情况下会得到相同的结果。

3、主流思路

3.1、基于文本的检测方法

该类方法直接以文本内容作为对比依据或将文本转成中间形式再进
行对比。

  • 以原代码行作为基础单位,后缀树分析。

  • 将源代码转成 token 序列,按照规则规范化 token 序列,再用后缀树分析。

  • 设计不同的前端将不同的代码转换成标准化的 token 序列,并采用优化后的前缀倍增算法
    加快了检测速度。

  • 将 token 序列定长子串进行映射,利用编辑距离算法确定克隆对,通过并查集算法加速构建克隆群,借此提供检测 Type-3 克隆代码的能力。

3.2、基于树的检测方法

该类方法的使用前提是通过词法分析器与语法分析器获取一个抽象语法树。查找克隆代码的过程其实是抽象语法树查找相同或者相似子树的过程。

  • 聚类查找相似子树。

  • 消除抽象语法树的冗余节点,分析相关节点生成特征标记串文本,并利用决策函数完成检测工作。

3.3、基于图的检测方法

该方法以包含调用关系、控制流信息与数据流信息的程序依赖图作为分析基础,并以基于依赖图查找同构子图的方式确定克隆代码的位置。

  • 以程序依赖图分割方法作为理论基础,结合了 Hadoop 并行查找结构子图的方式,加快了克隆代码的查找效
    率。

3.4、论文思路

(1)提出基于简单依赖图的分割与克隆代码匹配方法。通过固定分片边界,以 LLVM IR 代码特征作为匹配依据,确定克隆代码候选位置。

(2)提出基于简单依赖图的克隆代码合并与连接方法。通过连接候选代码片段,屏蔽孤立的代码片段,确定最大的连续克隆代码段。

(3)实现一个基于 LLVM 通用的克隆代码检测模型并进行实验对比。结合分割、匹配、过滤、合并流程,混合 LLVM 的特性以及机器学习知识,完成对克隆代码的检测。

image.png

image.png

基于llvm的编译器移植中关键技术研究 简单介绍如何在llvm上开发一个新后端,包括架构设计,寄存器与指令描述等 立即下载

相关推荐

代码相似度分析工具

一个代码相似度分析工具,结果准确度还行,分享给有需要的人。

【iOS逆向与安全】使用ollvm混淆你的源码

当你在研究别人源码的时候,是不是期望着别人代码没有进行任何的防护和混淆。这时的你,是不是应该考虑一下自己代码的安全.本篇文章将告诉你,如何使用ollvm来混淆iOS端的代码【此文为入门贴,大佬请绕道】。

小陈的技术博客 4275

克隆测试

克隆测试

基于NLP的软件安全研究(二)

一篇SANER 2022 B类会议关于跨语言源代码-二进制克隆检测论文

至臻求学,胸怀云月 6324

保姆级教程:用PyBullet和Stable-Baselines3搞定你的第一个机器人强化学习项目

本文提供了一份详细的PyBullet和Stable-Baselines3教程,帮助开发者快速上手机器人强化学习项目。通过环境配置、自定义Gym环境构建、PPO算法参数优化及模型部署的全流程解析,读者将掌握从零开始训练四足机器人 locomotion 任务的完整技术方案。

weixin_26861329的博客 420

ubuntu20.4源码安装最新gcc(gcc V12.2)

Ubuntu20.4自带的gcc为V9.4.0的版本,老版本的gcc存在不支持新版本C语言规范,在配置、编译、安装应用软件或工具时,可能存在不能正确安装的问题。(比如:libpqxx-7.7.4在配置时要求c++17版本的支持,但gcc V9.4.0版本不支持c++17)。因此本文介绍ubuntu20.4的系统下载最新gcc12.2版本源码,并进行本地编译、安装。本节内容包括gcc12.2的必备库安装和gcc12.2安装两部分内容组成。

q544344318的博客 1万+

Functional Code Clone Detection with Syntax and Semantics Fusion Learning论文总结

一、任务简介 代码克隆就是指源码中两段代码非常相似的现象。代码克隆检测有四个层次: 1.代码语句完全相同; 2.在1的基础上改变一些变量名、类型名或者是函数名; 3.在2的基础上增加或者减少一些语句; 4.功能相似,代码语句有很大差别。 一般有四种类型检测方法,基于文本和基于记号的方法一般用于对1.2类型的检测,基于语法的方法一般可以用于对1.2.3类型的检测以及部分4类型的检测。基于语义的...

qq_44190767的博客 1369

解决 python2.7中 ImportError: No module named Crypto.Signature

我的解决办法,先查看有没有安装 pip,直接执行pip 回车 没有出现null什么的就安装了,如果没有安装去其他博客哪里看一下,正常情况是默认就有的,然后使用。发现我自己也不会啊,就百度看看,想着网上的解决方法一大片,但是都是废话,能用的没有几个,而且能安装的没有几个。这个里面的python2、3就是系统里面的python版本,直接跟我这样就可以了除非版本不一样,也就是没有这个版本。就可以使用了,第一个应该是卸载之前的,然后重新安装,我的就是这样解决的。就比如我的,我现在使用的 python2.7。

记录一下 1610

[论文分享] BinGo: Cross-Architecture Cross-OS Binary Search

Paper share:BinGo

fa1c4的blog 708

matlab 点云泊松盘采样

本文介绍了泊松盘采样算法在三维点云处理中的应用。该算法通过最小间距约束(任意两点距离≥r)和均匀分布特性,生成高质量、均匀分布的点集。文章详细阐述了参数设置(如采样半径、候选点数),并与体素栅格、随机采样等方法进行了对比。代码实现部分展示了MATLAB版本的泊松盘采样算法,包括KD树加速和候选点生成机制。实验结果表明,该方法能有效保持点云特征,适用于点云简化、曲面重建等场景。文中还提供了参数调整建议和不同应用场景下的使用指导。

点云侠的博客 536

UE5、CesiumForUnreal实现加载GeoJson绘制多面(MultiPolygon)功能(支持点选高亮)

UE5、CesiumForUnreal实现加载GeoJson实现多面(MultiPolygon)的绘制功能,并且支持点选高亮和属性查询。

专注GIS开发 4628

二进制分析工具链:awesome-llvm-security中的逆向工程生态

awesome-llvm-security是一个专注于LLVM安全领域的开源项目,汇集了丰富的二进制分析工具和逆向工程资源,为安全研究人员和开发者提供了强大的技术支持。本文将带你深入探索这个项目中的核心工具链,帮助你快速掌握二进制分析与逆向工程的关键技能。 ## 什么是LLVM安全生态? LLVM(Low Level Virtual Machine)作为一个模块化、可重用的编译器和工具链技术套

gitblog_00338的博客 1001

超十万字解读Spring AI实战:开篇

大模型技术正以惊人的速度改变世界,2025年的人工智能已不再是科幻,而是现实。大模型如ChatGPT等,正在重塑各行各业,降低技术门槛,使专业能力普及化。SpringAI的出现为Java开发者提供了桥梁,使其能在企业级系统中稳定运行AI,同时保持工程化思维。尽管SpringAI在生态、学习成本和性能上存在不足,但其企业级基因和国产化适配能力使其成为Java开发者的重要工具。本系列文章旨在介绍SpringAI的功能与特性,鼓励更多Java开发者参与AI实践,共同探索AI时代的无限可能。

liaokailin的专栏 1575

LLVM Passes 项目教程

LLVM Passes 项目教程 项目介绍 LLVM Passes 是由 Quarkslab 维护的一个开源项目,专注于扩展和优化 LLVM 编译器的基础设施。LLVM(Low Level Virtual Machine)是一个广泛使用的编译器框架,支持多种编程语言和平台。通过编写和集成自定义的 LLVM Passes,开发者可以在编译过程中插入特定的优化和分析步骤,从而提高代码的性能和安全性。 ...

gitblog_00737的博客 891

大疆FPGA/芯片开发工程师(A卷)笔试题(含详解)

大疆芯片开发岗A卷 一、单选题 1.下列关于多bit数据跨时钟域的处理思路,错误的有   A、发送方给出数据,接收方用本地时钟同步两拍再使用   B、发送方把数据写到异步fifo,接收方从异步fifo里读出   C、对于连续变化的信号,发送方转为格雷码发送,接收方收到后再转为二进制   D、发送方给出数据,发送方给出握手请求,接收方收到后回复,发送方撤销数据 2.对12.918做无损定点化,需要的最小位宽是多少位,位宽选择11位时的量化误差是多少   A、12位,0.0118   B、13位,0.0039

Mr.翟的博客 2万+

AutoSAR系列讲解(入门篇)2.2-SWC的类型

该章讲解了两种SWC的分类,并且映射到实际的工程中应该是具体的什么文件类型

雪云飞星的博客 4万+

用源代码编译LLVM 17并开启AddressSanitizer(ASan)

在Ubuntu 22.04上使用源代码构建带有ASan的LLVM项目。

曹无悔的博客 1678

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

LLVM安装教程

LLVM安装教程

G191018的博客 4110

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

awesome-llvm-security部署指南:如何在AI代理中集成LLVM安全技能

awesome-llvm-security是一个面向AI代理的LLVM安全技能集合,提供了从二进制提升到静态分析的全方位安全能力集成方案。通过本文的简单步骤,即使是新手也能快速在Cursor、OpenClaw等AI编码助手或自定义AI代理中部署专业的LLVM安全技能。 ## 🌟 为什么选择awesome-llvm-security? 在AI驱动的安全开发中,专业工具链的集成往往是效率瓶颈。a

gitblog_00787的博客 459

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

基于LLVM的代码混淆技术:从环境搭建到Pass开发实战

编译器技术是现代软件安全与逆向工程的核心基础,其中LLVM作为模块化的编译器基础设施,通过其标准化的中间表示(IR)为代码分析与转换提供了统一的操作界面。理解LLVM IR的原理是掌握代码混淆与安全分析的关键,它允许开发者在编译器层面以可编程方式对代码进行深度操作。在软件保护领域,代码混淆技术通过增加逆向工程难度来保护知识产权,其技术价值在于在不改变程序语义的前提下提升分析复杂度。基于LLVM的混淆Pass开发,能够实现从指令替换到控制流扁平化等高级混淆技术,为安全工程师提供了从原理到实践的完整工具链。本文

weixin_34021089的博客 420

LLVM-Tracer 使用教程

LLVM-Tracer 使用教程 1. 项目介绍 LLVM-Tracer 是一个基于 LLVM 的动态 IR(中间表示)跟踪工具,它可以打印出程序运行时的 IR 指令以及寄存器和内存地址的值。该工具主要用于性能分析和架构优化的研究,可以帮助开发者更好地理解程序在运行时的行为。 2. 项目快速启动 环境准备 LLVM 6.0 和 Clang 6.0 64 位版本 GCC 5.4 或更高版本 CMa...

gitblog_00342的博客 386

编译器安全开发终极指南:基于awesome-llvm-security的LLVM插件开发实践

在当今软件安全日益重要的时代,**LLVM编译器安全开发**已经成为保护软件免受攻击的关键技术。无论你是编译器开发者、安全研究员还是软件工程师,掌握LLVM插件开发技能都能为你的项目提供强大的安全保障。本文将为你详细介绍如何基于awesome-llvm-security资源库进行**LLVM安全插件开发**,帮助你在编译器层面构建可靠的安全防线。 ## 🚀 为什么需要编译器安全开发? 传统的

gitblog_00452的博客 316

LLVM-MCTOLL安装记录

mctoll在WSL上的构建

qq_40947365的博客 540

编译器安全研究:Security-Paper项目中的LLVM与Capstone框架解析

在现代计算机安全领域,编译器安全扮演着至关重要的角色。Security-Paper项目作为一个全面的安全资料收集库,包含了丰富的编译器安全研究资源,其中LLVM和Capstone框架是两大核心工具。本文将深入解析这两个框架在编译器安全研究中的应用,帮助新手快速掌握关键知识点。 ## 一、LLVM框架:编译器安全的基石 LLVM(Low Level Virtual Machine)是一个模块化、

gitblog_01176的博客 345

【LLVM与Clang深度集成】:打造企业级代码质量管控插件的黄金法则

掌握Clang工具插件开发核心技术,提升企业代码质量管控效率。本文详解LLVM与Clang深度集成方法,覆盖静态分析、语法树遍历等关键场景,助力构建高效、可扩展的定制化插件,值得收藏。

StepLens的博客 716

如何利用LLVM控制流图分析优化程序结构:从基础到实践指南

LLVM项目作为编译器和工具链技术的集合,提供了强大的中间表示(IR)构建、代码优化及机器代码生成能力。其中控制流图(CFG)分析是优化程序结构的核心技术,能够帮助开发者理解程序执行路径、识别性能瓶颈并实现高效代码优化。本文将深入浅出地介绍LLVM中控制流图分析的基础原理、应用场景及实操方法,适合编译器开发新手和软件优化工程师学习。 ## 控制流图:程序优化的"地图" 🗺️ 控制流图是编译器

gitblog_00434的博客 780
上一篇: CMU C++ Tips 笔记
下一篇: 《深度探索C++对象模型》笔记
流左沙
博客等级 码龄11年 46粉丝 55原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值