Skip to main content
QUICK REVIEW

[论文解读] Learning C to x86 Translation: An Experiment in Neural Compilation

Jordi Armengol-Estapé, Michael O’Boyle|arXiv (Cornell University)|Aug 17, 2021
Software Engineering Research被引用 1
一句话总结

本文通过训练Transformer模型将C代码翻译为x86汇编语言,研究神经编译技术,将编译过程视为序列到序列的任务。尽管在语法正确性方面达到80%,BLEU分数较高(约90),但最佳模型仅能正确编译33%的函数,尤其在涉及数组和多参数的复杂函数上表现不佳。

ABSTRACT

Deep learning has had a significant impact on many fields. Recently, code-to-code neural models have been used in code translation, code refinement and decompilation. However, the question of whether these models can automate compilation has yet to be investigated. In this work, we explore neural compilation, building and evaluating Transformer models that learn how to produce x86 assembler from C code. Although preliminary results are relatively weak, we make our data, models and code publicly available to encourage further research in this area.

研究动机与目标

  • 探究深度学习模型是否能够实现从高级C代码到x86汇编的端到端编译自动化。
  • 评估监督式神经编译作为未来无监督新编程语言和指令集架构(ISA)编译基础的可行性。
  • 构建并发布一个用于未来神经编译研究的并行C-x86汇编语料库。
  • 分析序列到序列模型在处理编译任务中复杂控制流和数据结构时的局限性。

提出的方法

  • 将机器编译形式化为使用Transformer架构的序列到序列任务。
  • 利用Anghabench(一个基于函数级别的C语料库)和GCC生成的汇编代码,构建C到x86汇编的并行数据集。
  • 在并行语料库上使用最大似然估计训练Transformer模型,调整数据规模、模型大小和超参数。
  • 使用BLEU分数评估语法相似性,通过人工检查评估语义正确性。
  • 采用子词分词方法处理C代码和汇编代码中的罕见或未登录词。
  • 使用程序合成评估集中的基准测试来检验编译函数的语义正确性。

实验结果

研究问题

  • RQ1基于Transformer的模型能否学习将C函数翻译为语义正确的x86汇编?
  • RQ2模型性能如何随训练数据规模、模型容量和训练时长而变化?
  • RQ3神经模型在多大程度上能生成语法正确的汇编代码,且其生成内容在语义上是否合理?
  • RQ4神经编译在哪些方面存在失败模式,特别是在涉及数组和多参数的函数中?
  • RQ5是否可行将监督式神经模型作为无监督新编程语言和ISA编译的起点?

主要发现

  • 最佳模型在从C代码生成x86汇编时,语法正确性达到约80%。
  • 在某些基准测试中,BLEU分数接近90,表明与参考汇编代码在表面形式上高度相似。
  • 基准测试中仅有33%的函数被正确编译,尤其在涉及数组和多参数的函数上失败率显著。
  • 当输入复杂时,模型常生成简短但语法正确、语义无意义的汇编代码,类似于无条件汇编语言模型的输出。
  • 当模型过早终止生成时,常出现括号不匹配等语法错误,表明序列长度控制和解码策略存在问题。
  • 尽管BLEU分数较高,语义正确性仍是主要挑战,凸显了编译中表面相似性与功能等价性之间的鸿沟。

更好的研究,从现在开始

从论文设计到论文写作,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。