デコンパイルに特化した大規模言語モデル「LLM4Decompile」の登場
3つの要点
✔️ デコンパイルに特化した初のオープンソースモデル「LLM4Decompile」を開発
✔️ モデルに新しい学習目的を導入し、デコンパイルの精度向上を実現
✔️ 再コンパイルと再実行可能性に焦点を当てたデコンパイルのための初の標準化されたベンチマークを構築
LLM4Decompile: Decompiling Binary Code with Large Language Models
written by Hanzhuo Tan, Qi Luo, Jing Li, Yuqun Zhang
(Submitted on 8 Mar 2024)
Comments: Published on arxiv.
Subjects: Programming Languages (cs.PL); Computation and Language (cs.CL)
code:
本記事で使用している画像は論文中のもの、紹介スライドのもの、またはそれを参考に作成したものを使用しております。
概要
デコンパイルは、既にコンパイルされた機械語やバイトコードを元の高レベルプログラミング言語に戻す技術です。この技術は特に、ソフトウェアのソースコードが手に入らない場合に、その内部動作を解析するために利用されます。GhidraやIDA Proといった専用ツールが開発されていますが、これらは人が読みやすい形式のコードを生成することには苦戦します。デコンパイルの最大の挑戦は、コンパイル時に失われがちな変数名やループ、条件文などのコードの基本構造を完全に再現することです。
この問題に対処するために、大規模言語モデル(LLM)の最近の進化が注目されています。これらは、プログラミング言語を一種の言語システムとして捉え、事前に学習されたモデルを用いて様々なコーディングタスクに取り組んでいます。これにより、従来の手法を大きく上回る成果が示され、デコンパイルの分野でも同様のアプローチが可能であることが示唆されています。
しかし、これまでデコンパイル技術を評価し比較するための標準的なベンチマークや、公に利用可能なデータセットはほとんど存在しません。研究者たちは異なるデータセットを使用しており、結果の直接比較が難しい状況です。そこで、この論文では、デコンパイル専用のオープンソースの大規模言語モデルを開発し、再コンパイル可能性や再実行可能性に焦点を当てた初のデコンパイルのベンチマークを構築しています。これにより、デコンパイル分野の評価基準を統一し、さらなる研究の促進が期待されます。下図は、この論文のデコンパイル評価に関わるステップを示しています。
LLM4Decompileとは
LLM4Decompileは、プログラムのデコンパイルに特化した画期的な取り組みです。まず事前学習データの構築において、Anghabenchという公開された100万個のコンパイル可能なCファイルを基にしています。この豊富なデータセットを活用し、アセンブリコードとソースコードのペアを作成しています。具体的には、ソースコードをまずバイナリオブジェクトファイルに変換し、次にそれをアセンブリコードに逆アセンブルして、x86 Linuxプラットフォーム上でソースコードとペアリングします。プログラマが実行パフォーマンスを最適化するために使用する様々なコンパイラ最適化フラグも考慮しています。最適化プロセスは、ソースコードをより高速かつ効率的な機械コードに変換するための技術です。最適化レベルは、デフォルトのO0(最適化なし)からO3(積極的な最適化)まで、ソースコードを様々な段階でコンパイルします。これらの過程を通じて、モデルに最適化段階について学習させるためのユニークなプロンプトを使用しています。
「これは[最適化状態]の最適化を施したアセンブリコードです:[アセンブリコード]。ソースコードは何ですか?」
この方法で、LLM4Decompileは、プログラミングの世界における深い理解を模索し、より正確なデコンパイルを実現するための基盤を築いています。
次に、LLM4Decompileのモデル設定では、LDeepSeek-Coderと同じアーキテクチャを使用し、対応するDeepSeek-Coderのチェックポイントでモデルを初期化しています。そして、学習目的は次の2つに分類されています。
1つ目の目的は、Next token prediction(NTP)です。与えられた入力に基づいて次に来るべきトークンを予測するものです。このアプローチは、多くの大規模言語モデルの事前学習において中心的な役割を果たしており、真のトークンに対する負の対数確率を最小化することを目指します。このプロセスは、入力されたシーケンスに基づき、より正確な予測を行うためのモデルのパラメータを洗練させることを意味します。
2つ目の目的は、Sequence-to-sequesce(S2S)です。入力されたシーケンスに対して期待される出力を予測するものです。これは、特にニューラル機械翻訳モデルで採用されているアプローチであり、Cコードのトークンに対する負の対数確率を最小化することに焦点を当てています。この目標では、出力シーケンスに対する損失のみを計算し、より精度高い翻訳を実現しています。
これら2つの学習目的の主な違いは、入力シーケンスやアセンブリコードが学習損失の計算にどのように影響するかにあります。NTPではすべての入力が考慮されるのに対し、S2Sでは出力シーケンスのみが重視されます。この論文では、これらの目標がデコンパイルの精度向上にどのように貢献するかを明らかにするために、様々なアブレーションスタディを行っています。
実験結果
研究成果をまとめた下表から、興味深い結果が浮かび上がっています。最初は、DeepSeek-Coderの基本バージョンでもバイナリのデコンパイルに苦労し、コンパイルは可能な場合もあれば、元のプログラムの意味を正確に捉えることができないケースも見られます。しかし、ファインチューニングを施した後のLLM4Decompileモデルは、バイナリのデコンパイル能力において大幅な改善を実現しています。実に90%のコードがコンパイル可能となり、これはコードの構造と文法への深い理解を示唆しています。
特に注目すべきは、LLM4Decompileの6Bバージョンが、1Bバージョンと比較して、コードの実行能力において明らかな優位性を示している点です。6Bバージョンからデコンパイルされたコードの21%がプログラムの本質を正確に捉え、全てのテストケースをクリアしましたが、1Bバージョンではたった10%にとどまっています。この改善は、プログラムの意味を捉える上で、より大きなモデルサイズがもたらす利点を強調しています。また一方で、モデルサイズを33Bまで増やしても、再実行可能性の向上はわずか1パーセンテージポイント未満という小さな改善にとどまっています。これは、33Bモデルを調整することの難しさを示唆しているかもしれません。
AnghaBenchにおける結果をまとめた下表では、LLM4Decompileが特に高いBLEUスコアとESスコアを記録しています。6Bモデルは、0.82のBLEUスコアを達成し、これはソースコードに非常に近い結果です。この驚異的なパフォーマンスは、テストセット内に重大なデータ漏洩がある可能性を示唆しています。現実的には、変数が正規化されたデコンパイルコードがこれほど高いN-gram/ESスコアを達成することはあり得ません。この異常は、以前の研究で報告された高BLEUスコア、ESスコアと同様、デコンパイルの評価のための独立した信頼できるベンチマークを確立することの重要性を浮き彫りにしています。
また、Sequence-to-sequesce(S2S)の予測手法は、その特性から他の学習手法よりも一歩先を行く性能を示しています。その秘密は、アセンブリコードを損失関数の計算から除外し、モデルがソースコードの生成に集中できるようにすることにあると言えます。この集中が、デコンパイルされたコードの背後にあるパターンや構造をモデルがより深く理解することを可能にします。
しかし、アセンブリコードをトレーニングプロセスに含めることは、パフォーマンスを約4ポイント下げることがあり、これはNext token prediction(NTP)タスクで顕著です(下表)。アセンブリコードの本質的な複雑さとローレベルの特性が、モデルが意味あるパターンを学習するのを困難にしています。S2Sアプローチは、この複雑さを避け、モデルが高レベルのソースコードパターンに焦点を当てることを可能にします。
また、アセンブリコードとCコードの両方を含む初期トレーニングに続いて、翻訳タスク(NTP+S2S)に焦点を当てたファインチューニングを試みる代替戦略もありますが、この方法はS2Sアプローチほどの効果はありません。このアブレーションスタディは、LLM4Decompileがデコンパイルプロセスにおいてどのように進化しているか、そしてなぜ特定の方法が優れているのかを明らかにしています。
まとめ
この論文では、初めてのオープンソースでデコンパイルに焦点を当てた大規模言語モデルと、標準化された再コンパイル可能性/再実行可能性ベンチマークを提供しています。この多様なコンパイル済みCコードデータセットに対する分析から、有望な能力が明らかになっています。LLM4Decompile-6Bは87%の再コンパイル可能性を達成し、これは構文的理解を示しており、21%の再実行可能性は意味の保存を示唆しています。データ駆動型デコンパイルへの初期探求として、この論文は将来の取り組みを動機付けるためのオープンなベンチマークを確立しています。公開されたデータセット、モデル、分析は、新しい技術を通じてデコンパイルを強化するための素晴らしい可能性を表しています。
この記事に関するカテゴリー