質問:
LLVM IR逆コンパイルの最新技術は何ですか?
nneonneo
2013-03-31 13:27:01 UTC
view on stackexchange narkive permalink

LLVM IRは、LLVMによって直接実行され、オンザフライでJITにコンパイルできる、かなり高レベルの型付きビットコードです。新しい実行可能形式またはプログラミング言語がLLVMの上に直接設計され、インタープリター型言語であるかのように実行されても、私は驚かないでしょう。

この点で、私は状態に興味があります。 LLVM逆コンパイルに関する最新技術。これは分析しやすいように特別に設計された型付きビットコードであるため、逆コンパイル(または少なくともより読みやすい論理形式に再構築)が比較的簡単であると予想される場合があります。

グーグルはこのBSc論文は比較的初歩的な仕事をしていますが、他のリードはほとんどないようです。このフェローのスーパーバイザーがこの分野でさらに調査を行うことを期待していたかもしれませんが、彼の焦点はコンパイラの設計分野の研究に向けられているようです。

研究プロジェクトはありますか、商用プロトタイプ、またはLLVM逆コンパイルの分野で行われているあらゆる種類の活発な研究ですか?

1 回答:
Andrew
2013-04-01 11:46:30 UTC
view on stackexchange narkive permalink

逆コンパイルは非常に簡単です。 LLVMは長い間CBackendに同梱されていました。CBackendはLLVMをCに変換します。

今日のフロントエンド(clang)によって作成されたLLVMは、考えられるあらゆる種類の分析と理解に非常に適しています。したがって、おそらく通常のLLVMツール(opt、llc)を使用してIRを「逆コンパイル」することができます。 LLVM IR自体は非常に読みやすいと思いますが、奇妙です。

ただし、Cをアセンブラにコンパイルするのと同じように、一部の情報が失われたり破壊されたりします。構造体フィールド名はなくなり、永久にインデックスに置き換えられます。ただし、それらのタイプは残ります。概念としての制御フローはそのままで、コードとデータの混乱はありませんが、関数は機能していないかインライン化されているため、削除できます。列挙値も削除されると思います。グローバル変数のタイプと同様に、機能するパラメーター情報は残ります。

実際には、LLVMコントリビューターが提案した方法でビットコード形式を使用する際の落とし穴と問題の概要を説明するまともな投稿があります。多くの人が彼の話を聞いているようです。そのため、LLVMビットコードを理解するために現在使用しているツールを超える必要があるかどうかはわかりません...

PNaClは現在、フォーマットとしてLLVM(の縮小サブセット)を使用しています。つまり、コンパイラIRだけではありません。


このQ&Aは英語から自動的に翻訳されました。オリジナルのコンテンツはstackexchangeで入手できます。これは、配布されているcc by-sa 3.0ライセンスに感謝します。
Loading...