网站建设公司工资标准,模板企业网站,公司网站后台上怎么上传图片呢,企业网站的建站步骤概述
论文地址#xff1a;https://arxiv.org/abs/2403.05286
反编译是一种将已编译的机器语言或字节码转换回原始高级编程语言的技术。该技术用于分析软件的内部工作原理#xff0c;尤其是在没有源代码的情况下#xff1b;Ghidra 和 IDA Pro 等专用工具已经开发出来#…概述
论文地址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 代码的初始训练之后尝试以翻译任务为重点进行微调NTPS2S但这种方法不如 S2S 方法有效。这项消融研究强调了 LLM4Decompile 在反编译过程中的演变过程以及某些方法更胜一筹的原因。
总结
本文提供了首个开源的、以反编译为重点的大规模语言模型和标准化的可重编译性/可重执行性基准。对这组不同的 C 代码编译数据集的分析表明LLM4Decompile-6B 的可重编译性和可重执行性分别达到了 87% 和 21%前者表明了语法理解后者表明了语义保护。作为对数据驱动反编译的初步探索本文建立了一个开放的基准以激励未来的努力。已发布的数据集、模型和分析都体现了通过新技术提高反编译能力的巨大潜力。