Page 11 - 《软件学报》2026年第6期
P. 11
2330 软件学报 2026 年第 37 卷第 6 期
译工具 RetDec, 仅支持 x86 与 ARM 等少数指令集架构. 该项目自 2022 年开始因资源不足进入有限维护状态而停
止功能更新, 进一步反映出此类工具在可持续开发方面的挑战. 表 1 统计了当前主流反编译器对 RISC-V 架构的
支持情况, 结果显示仅有少数工具能够有效处理 RISC-V 目标代码. 此外, RISC-V 指令集的可扩展特性导致其生
态中出现多种扩展指令集, 造成一定程度的架构碎片化. 针对这一问题, 现有反编译工具普遍缺乏原生适配能力,
必须通过额外开发才能支持包含扩展指令的代码, 进一步加重了工程负担与维护难度.
近年来, 随着深度神经网络模型在代码分析与处理任务中的广泛应用 [11−18] , 基于神经网络的反编译技术逐渐
受到关注. 这类方法旨在利用深度学习模型强大的表示与推理能力, 以数据驱动的方式替代传统反编译工具中依
赖人工设计的复杂规则. 通过在大规模代码数据上训练端到端的反编译模型, 或对已有的通用代码模型进行反编
译任务适配, 神经网络辅助的反编译系统能够生成结构更清晰、可读性更高的代码. 特别是随着 LLM 技术的显著
进展, 其从海量代码语料中获得的丰富语义知识、出色的上下文理解能力以及优秀的泛化性能, 为解决上述传统
反编译器面临的两大核心挑战提供了新的思路. 具体来说, LLM 在代码理解与生成方面展现出强大潜力, 能够生
成语义更贴合上下文的目标代码. 例如, 在变量命名时能够恢复具有实际意义的标识符名称, 而非简单的“var1”类
占位符. 另一方面, 通过对 LLM 进行有针对性的微调, 可以进一步激发其跨指令集架构的泛化能力, 从而为支持新
硬件平台的反编译任务提供一种灵活且可扩展的解决方案.
然而, 需要指出的是, 神经网络方法本身存在一定的固有不确定性, 并可能产生幻觉现象, 导致生成结果中出
现看似合理但不正确的代码片段. 因此, 如何保障神经反编译系统输出结果的可靠性与正确性, 仍是当前研究中亟
待解决的关键问题. 针对传统反编译器的可靠性验证, Zou 等人 [19] 提出了测试框架 D-Helix, 其核心方法是利用符
号执行技术检查反编译中间代码与高级语言代码之间的一致性, 从而发掘反编译器中存在的缺陷. 然而, D-Helix
依赖预定义的规则对编译错误进行修复, 这类规则往往覆盖有限, 且可能引入语义失真, 从而限制了该框架的实用
性. 本文探索了基于 LLM 修复编译错误, 并结合符号执行对修复后代码进行语义等价性验证的协同方法. 该方法
将 D-Helix 的验证思路扩展至神经反编译场景, 从而为神经反编译的可靠性验证提供可行的技术支撑.
1.2 相关工作
本节介绍神经反编译技术的相关研究进展. 基于深度神经网络的反编译技术致力于将自然语言处理领域的深
度模型成功经验迁移至代码反编译任务中, 该领域的研究发展可划分为 3 个阶段.
第 1 阶段以循环神经网络 (recurrent neural network, RNN) 为主要模型基础. 在该阶段中, 研究者将反编译视
为一种特殊的神经机器翻译任务, 并利用代码的领域知识设计专门的特征输入方法. 与常规机器翻译任务缺乏双
语语料库不同, 针对代码的反编译任务可利用编译器自动生成大量配对的高级语言与低级语言样本. Katz 等人 [8]
将基于 RNN 的序列到序列模型应用于从低级代码到高级代码的翻译任务. 随后, Fu 等人 [9] 指出原始的序列到序
列模型因缺乏对底层代码领域知识的建模能力而不适用于反编译任务, 并提出了多模型协同的神经反编译器框
架 Coda. 该框架使用不同的神经网络分别承担反编译代码生成与错误预测子任务, 进而引入自动纠错机制以提升
生成代码的可靠性. 这一阶段的研究初步确立了将神经网络应用于反编译任务的基本范式, 即借助编译器自动构
建大规模配对样本, 并基于此训练语言模型. 然而, 受限于 RNN 架构难以有效建模程序代码中的长距离依赖和复
杂语法结构, 这导致反编译结果的正确性和可读性较差, 仅在实验设定下的简单代码片段上取得一定效果.
第 2 阶段的发展与 Transformer 模型 [20] 的广泛成功密切相关. 研究者尝试将更大规模的语言模型应用于反编
译任务. Hosseini 等人 [21] 提出了基于 Transformer 的反编译模型 BTC, 其特点是将源代码视为纯文本输入, 从而避
免在特征构建过程中依赖代码领域知识, 降低了模型跨编程语言迁移的复杂性. 在 Go、Fortran、OCaml 和 C 等
多种语言上进行的实验表明, BTC 达到了与已有方法相当的性能. Al-Kaswan 等人 [22] 构建了一个包含 21.4 万个样
本的反编译数据集 CAPYBARA, 并在该数据集上对预训练语言模型 CodeT5 [23] 进行微调, 得到反编译模型 BinT5.
该模型在反编译任务中取得了 58.82% 的 BLEU-4 分数. 此后, Armengol-Estapé等人 [24] 提出反编译模型 SLaDe, 其
特点是为源代码设计了专用分词器, 并利用 PsycheC [25] 工具为模型输出的反编译代码补全类型信息. 实验结果表
明, SLaDe 生成代码的准确率优于传统反编译器 Ghidra. Jiang 等人 [26] 提出基于大语言模型预训练的反编译模型
Nova, 该模型针对编译优化问题设计了优化生成与优化级别预测两个预训练任务, 从而在优化级别较高的汇编代

