LLM4Decompile——专门用于反编译的大规模语言模型

news2024/11/26 6:00:25

概述

论文地址:https://arxiv.org/abs/2403.05286

反编译是一种将已编译的机器语言或字节码转换回原始高级编程语言的技术。该技术用于分析软件的内部工作原理,尤其是在没有源代码的情况下;Ghidra 和 IDA Pro 等专用工具已经开发出来,但这些工具很难生成人类可读格式的代码。反编译的最大挑战是完全再现代码的基本结构,如变量名、循环和条件语句,这些在编译过程中往往会丢失。

为解决这一问题,大规模语言模型(LLM)的最新进展备受瞩目。这些模型将编程语言视为一种语言系统,并使用预先训练好的模型来处理各种编码任务。与传统方法相比,这种方法取得了显著的进步,并表明在反编译领域也可以采用类似的方法。

然而,到目前为止,很少有标准基准或公开可用的数据集来评估和比较反编译技术。研究人员使用不同的数据集,因此很难对结果进行直接比较。因此,在本文中,我们开发了一个专门用于反编译的开源大规模语言模型,并建立了第一个侧重于可重编译性和可重执行性的反编译基准。这有望统一反编译领域的评估标准,促进进一步的研究。下图显示了本文的反编译评估步骤。

什么是 LLM4Decompile?

LLM4Decompile 是一项致力于反编译程序的开创性举措。首先,在构建预训练数据时,它以一百万个名为 Anghabench 的公开可编译 C 文件为基础。利用这一丰富的数据集创建汇编代码和源代码对。具体来说,首先将源代码转换为二进制对象文件,然后将其反汇编为汇编代码,并与 x86 Linux 平台上的源代码配对。它还考虑了程序员为优化执行性能而使用的各种编译器优化标志。优化过程是一种将源代码转换为更快、更高效的机器代码的技术。优化级别在不同阶段对源代码进行编译,从默认的 O0(无优化)到 O3(积极优化)。在整个过程中,都会使用独特的提示来让模型了解优化阶段。

这是具有 [优化状态] 优化功能的汇编代码:[汇编代码]。源代码是什么?

通过这种方式,LLM4Decompile 可以更深入地了解编程世界,并为更精确的反编译奠定基础。

接下来,LLM4Decompile 模型设置使用与 LDeepSeek-Coder 相同的架构,并使用相应的 DeepSeek-Coder 检查点初始化模型。学习目标分为两类

第一个目标是下一个标记预测(NTP)。它根据给定的输入预测下一个标记。这种方法在许多大规模语言模型的预训练中发挥着核心作用,其目的是最大限度地降低真实标记的负对数概率。这一过程包括改进模型参数,以便根据输入序列做出更准确的预测。

第二个目标是序列到序列(S2S)。它预测输入序列的预期输出。这是一种专门用于神经机器翻译模型的方法,其重点是尽量减少 C 代码中标记的负对数概率。以此为目标,只计算输出序列的损失,从而实现更准确的翻译。

这两种学习目标的主要区别在于输入序列和汇编代码如何影响学习损失的计算:在 NTP 中,所有输入都被考虑在内,而在 S2S 中,只强调输出序列。本文进行了各种消融研究,以确定这些目标如何影响反编译的准确性。

实验结果

下表总结了有趣的研究结果。最初,即使是基本版本的 DeepSeek-Coder 也很难反编译二进制文件,在某些情况下可以编译,但在其他情况下却无法准确捕捉原始程序的含义。不过,经过微调后,LLM4Decompile 模型在反编译二进制文件的能力上有了显著提高。事实上,90% 的代码都可以编译,这表明我们对代码的结构和语法有了更深入的理解。

值得注意的是,6B 版本的 LLM4Decompile 在执行代码的能力方面比 1B 版本有明显优势:6B 版本反编译出的代码中有 21% 准确地抓住了程序的本质并通过了所有测试用例。而 1B 版本只有 10%。这一改进凸显了扩大模型规模对捕捉程序含义的益处。另一方面,将模型规模增大到 33B 也会导致可再运行性的小幅改善,改善幅度不到一个百分点。这可能说明了调整到 33B 模型的难度。

下表总结了 AnghaBench 中的结果,显示 LLM4Decompile 取得了特别高的 BLEU 和 ES 分数;6B 模型的 BLEU 分数为 0.82,与源代码非常接近。这一令人印象深刻的表现表明,测试集中可能存在严重的数据泄漏。实际上,带有规范化变量的反编译代码不可能达到如此高的 N-gram/ES 分数。这一反常现象,以及之前研究中报告的高 BLEU 和 ES 分数,凸显了建立独立可靠的反编译评估基准的重要性。

序列到序列(S2S)预测方法也因其特点而显示出领先于其他学习方法的性能。其中的奥秘可以说在于汇编代码被排除在损失函数的计算之外,从而使模型能够专注于源代码的生成。这种集中可以让模型更好地理解反编译代码背后的模式和结构。

但是,在训练过程中加入汇编代码会使性能降低约 4 个百分点,这在下一个标记预测 (NTP)任务中尤为明显(下表)。汇编代码固有的复杂性和低级特性使模型难以学习有意义的模式;S2S 方法避免了这种复杂性,使模型能够专注于高级源代码模式。

还有另一种策略,即在涉及汇编和 C 代码的初始训练之后,尝试以翻译任务为重点进行微调(NTP+S2S),但这种方法不如 S2S 方法有效。这项消融研究强调了 LLM4Decompile 在反编译过程中的演变过程,以及某些方法更胜一筹的原因。

总结

本文提供了首个开源的、以反编译为重点的大规模语言模型和标准化的可重编译性/可重执行性基准。对这组不同的 C 代码编译数据集的分析表明,LLM4Decompile-6B 的可重编译性和可重执行性分别达到了 87% 和 21%,前者表明了语法理解,后者表明了语义保护。作为对数据驱动反编译的初步探索,本文建立了一个开放的基准,以激励未来的努力。已发布的数据集、模型和分析都体现了通过新技术提高反编译能力的巨大潜力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1892740.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PyCharm社区版Cython支持

自己在文件类型中加一个&#xff0c;名称叫【pythonC】 &#xff0c;文件名模式这一栏要加*.pyx的后缀&#xff0c;之后双击【pythonC】编辑这个文件类型 这里1、2、3、4配置如下 # 1 " # &*, - / : ; <>[ ] { }# 2 False None True and as assert break cdef …

vue 启动项目报错Syntax Error: Error: PostCSS received undefined instead of CSS string

启动vue项目然后报错如下图 这个是跟node版本有关系 因为要开发不同的项目使用不同的node版本&#xff0c;所以就用nvm切换&#xff0c;所以导致了node-sass编译问题 执行这个命令就可以 npm install node-sass or npm rebuild node-sass node-sass对于node高版本和低版本切…

GIT - 一条命令把项目更新到远程仓库

前言 阅读本文大概需要1分钟 说明 更新项目到远程仓库只需要执行一条命令&#xff0c;相当的简便 步骤 第一步 编辑配置文件 vim ~/.bash_profile第二步 写入配置文件 gsh() {local msg"${1:-ADD COMMIT PUSH}"git add . && git commit -m "$m…

垂直领域大模型的机遇与挑战:从构建到应用

在人工智能技术的浪潮中,大模型以其强大的数据处理和学习能力,成为推动科技进步的重要力量。然而,这种跨领域应用的过程并非一帆风顺,既面临挑战也蕴含机遇。本文从复旦大学的研究工作出发,详细分析大模型的机遇与挑战。 背景 GPT4技术报告指出,GPT4仍处于通用人工智…

软考高级真的已经烂大街了吗?

软考高级是否“烂大街”是一个相对的观点&#xff0c;这取决于不同的视角和使用场景。虽然有人认为软考高级证书的普及度提高&#xff0c;可能给人一种“烂大街”的感觉&#xff0c;但实际上它仍然具有一定的价值和特定用途。 证书的普遍性与价值 普遍性增加&#xff1a;随着更…

Springboot3本地编译exe文件(实现快速启动仅需200ms)

1. 准备好grallvm版本的JDK jdk17以上 &#xff08;springboot3最低支持jdk17&#xff09; grallvm-jdk17 Download GraalVM 下载界面 2. 配置maven 3.9.x 及以上 maven 3.9.8 Maven – Download Apache Maven 3.创建SpringBoot项目 3.1 项目所需依赖 记得选择这俩个进…

上新:NFTScan 正式上线 Bitcoin-Runes 浏览器!

近日&#xff0c;NFTScan 团队正式对外发布了 Bitcoin-Runes 浏览器&#xff0c;将为 Runes 生态的 NFT 开发者和用户提供简洁高效的 NFT 数据搜索查询服务。Runes 协议的主要目的是定义一种在比特币网络上进行符号化资产交换的方式。它使用 Rune 作为符号化资产的单位&#xf…

量化实例分析初探

一、量化介绍 大型语言模型通常具有数十亿乃至上百亿参数&#xff0c;导致存储和计算成本极高&#xff0c;大多数下游用户难以进行微调。为了便于进一步部署&#xff0c;大模型的模型压缩成为关键的解决方案。 模型压缩目标&#xff1a;减少模型大小&#xff0c;加快训练速度…

dell服务器RAID5磁盘阵列出现故障的解决过程二——热备盘制作与坏盘替换过程

目录 背景方案概念全局热备&#xff08;Global Hot Spare&#xff09;&#xff1a;独立热备&#xff08;Dedicated Hot Spare&#xff09;&#xff1a; 过程8号制作成热备清除配置制作独立热备热备顶替坏盘直接rebuild 更换2号盘2号热备 注意注意事项foreign状态要先清除配置 背…

Fiddler关于Repaly的细节您了解吗?如何重复执行请求?

最近深入的使用了一下Fiddler的Repaly功能&#xff0c;没想到有这么多的细节&#xff0c;不仅可以设置Repaly的次数&#xff0c;还可以无条件地重发选中的请求&#xff0c;而不考虑之前的请求条件或缓存状态。在这里与各位小伙伴分享一下&#xff0c;希望能够帮到大家&#xff…

Unity射击游戏开发教程:(29)躲避敌人的子弹射击

在这篇文章中,我将介绍如何创建一个可以使玩家火力无效的敌人。创建的行为如下...... 当玩家向敌人开火时,敌人会向左或向右移动。向左或向右的移动是随机选择的,并在一段时间后停止敌人的移动。如果敌人移出屏幕,它就会绕到另一边。将一个精灵拖到画布上,将其缩小以匹配游…

Vue实现金钱输入框组件自动带千位逗号

新建PriceInput.vue <template><div id"bord"><el-inputv-model"inputValue"v-bind"$attrs":maxlength"maxlength"input"handleInput"focus"handleFocus"blur"handleBlur"change"h…

Springboot煤炉网站代切系统-计算机毕业设计源码06656

目 录 摘要 1 绪论 1.1 课题目的与意义 1.2国内外研究现状 1.3论文结构与章节安排 1.4 Springboot框架介绍 2 Springboot煤炉网站代切系统系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 操作可行性分析 2.2 系统功能分析 2.2.1 功能性…

9.计算机视觉—目标检测

目录 1.物体检测边缘框目标检测数据集总结边缘框代码实现2.锚框:目标检测的一种方法IoU—交并比赋予锚框标号使用非极大值抑制(NMS)输出总结代码实现1.物体检测 边缘框 一个边缘框可以通过四个数字定义 (左上x,左上y),(右下x,右下y)(左上x,左上y,宽,高)(中间x,中间y…

Llama-2 vs. Llama-3:利用微型基准测试(井字游戏)评估大模型

编者按&#xff1a; 如何更好地评估和比较不同版本的大语言模型&#xff1f;传统的学术基准测试固然重要&#xff0c;但往往难以全面反映模型在实际应用场景中的表现。在此背景下&#xff0c;本文作者别出心裁&#xff0c;通过让 Llama-2 和 Llama-3 模型进行井字游戏对决&…

轻松搞定!4个微信图片恢复方法大揭秘

在日常使用微信的过程中&#xff0c;我们经常会通过微信发送和接收大量图片&#xff0c;这些图片记录了许多重要的瞬间和信息。然而&#xff0c;误操作、手机故障或软件更新等原因可能导致我们不小心删除了这些宝贵的图片。 当这些重要的图片消失时&#xff0c;往往会让我们感…

提升学生职务执行力的智慧校园学工管理策略

智慧校园的学工管理系统匠心独运地融入了“学生职务”这一创新模块&#xff0c;它紧密贴合学生的实际需求&#xff0c;致力于在校期间的实践经验积累和个人能力的全面提升。这个模块化身为一个便捷的综合平台&#xff0c;让学生们能够轻松发掘并参与到丰富多彩的校内职务中去&a…

2. jenkins发布java项目

jenkins发布java项目 一、环境描述二、部署tomcat业务服务器三、部署git服务器&#xff0c;上传测试代码1、部署git服务器2、上传测试代码 四、jenkins对接组件1、安装必要的插件2、对接git客户端3、对接maven工具4、配置maven需要的jdk5、配置gitlab服务器的连接6、在jenkins上…

VBA 操作注册表

1. SaveSetting 1-1. 语法 SaveSetting(AppName As String, Section As String, Key As String, Setting As String) 1-2. 函数说明 在Windows注册表中创建或保存一个应用程序项。将值写入注册表中的HKEY_CURRENT_USER\Software\VBand VBA Program Settings键的子键 1-3. 参…

#BI建模与数仓建模有什么区别?指标体系由谁来搭建?

问题1&#xff1a; 指标体系是我们数仓来搭建还是分析师来做&#xff0c;如何去推动&#xff1f; 问题2&#xff1a;BI建模与数仓建模有什么区别&#xff1f; 指标体系要想做好&#xff0c;其实是分两块内容的&#xff0c;一块是顶层设计阶段&#xff0c;业务指标体系的搭建&am…