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)|2021. 08. 17.
Software Engineering Research인용 수 1
한 줄 요약

이 논문은 C 코드를 x86 어셈블리로 변환하는 것을 시퀀스 투 시퀀스 작업으로 간주하여, Transformer 모델을 사용해 신경망 컴파일러를 연구한다. 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-to-x86 어셈블리 병렬 데이터셋을 구축한다.
  • 데이터 크기, 모델 크기, 하이퍼파라미터를 다양하게 조절하여 병렬 코퍼스에서 최대우도 추정을 사용해 Transformer 모델을 훈련한다.
  • BLEU 점수를 통한 문법 유사도 평가와 수작업 검토를 통한 의미적 정확도 평가를 수행한다.
  • C 및 어셈블리 코드에서 드문 또는 OOV(Out-of-Vocabulary) 토큰을 처리하기 위해 서브워드 토크나이제이션을 사용한다.
  • 컴파일된 함수의 의미적 정확도를 테스트하기 위해 프로그램 합성 평가 세트의 벤치마크를 활용한다.

실험 결과

연구 질문

  • RQ1Transformer 기반 모델은 C 함수를 의미적으로 올바른 x86 어셈블리로 번역하는 데 성공할 수 있는가?
  • RQ2학습 데이터 크기, 모델 용량, 학습 기간에 따라 모델 성능은 어떻게 변화하는가?
  • RQ3신경망 모델이 얼마나 높은 수준의 문법적 정확도를 달성할 수 있으며, 그 어셈블리 코드는 얼마나 자주 의미 있는가?
  • RQ4배열과 다수의 인자를 포함한 함수에서 신경망 컴파일의 실패 원인은 무엇인가?
  • RQ5새로운 프로그래밍 언어와 ISA에 대한 비지도 컴파일을 위한 기초로 감독 학습 기반 신경망 모델을 사용하는 것이 가능한가?

주요 결과

  • 최고의 모델은 C 코드에서 x86 어셈블리 코드를 생성할 때 약 80%의 문법적 정확도를 달성한다.
  • 일부 벤치마크에서 BLEU 점수가 약 90에 이르며, 기준 어셈블리 코드와 강한 표면 수준의 유사성을 나타낸다.
  • 벤치마크 내 함수 중 오직 33%만 정확하게 컴파일되었으며, 배열과 다수의 인자를 포함한 함수에서 특히 실패가 빈번했다.
  • 입력이 복잡할 경우 모델은 짧지만 문법적으로는 유효하지만 의미가 없는 어셈블리 코드를 자주 생성하며, 이는 무조건적 어셈블러 언어 모델을 모방하는 경향이 있다.
  • 모델이 생성을 조기에 종료할 경우, 괄호가 균형 잡히지 않은 문법 오류가 발생하여, 이는 시퀀스 길이 및 디코딩 제어 문제를 시사한다.
  • 높은 BLEU 점수에도 불구하고 의미적 정확도는 여전히 주요 과제로 남아 있으며, 이는 컴파일에서 표면 수준의 유사성과 기능적 동치성 사이의 격차를 드러낸다.

더 나은 연구,지금 바로 시작하세요

연구 설계부터 논문 작성까지, 연구 시간을 획기적으로 줄여보세요.

카드 등록 없음 · 무료 플랜 제공

이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.