コンパイラを構築するための理論と技術に関する書籍や論文は、100 万冊もあるはずです。逆を行うためのリソースはありますか? 特定のハードウェア プラットフォームには興味がありません。主題と困難を深く考察している優れた本/研究論文を探しています。
3 に答える
私は AS3 と Java の逆コンパイラに取り組んできましたが、逆コンパイルに関して私が学んだことはすべて、コンパイラ理論から直接得たものであることを保証できます。中間表現、データ フロー分析、用語の書き換え、およびその他の関連する概念はすべて、ドラゴン ブックに記載されています。
逆コンパイルは本当に誤称です。逆コンパイラは、オブジェクト コードをソース表現にコンパイルします。多くの点で、従来のコンパイラよりも簡単に記述できます。「ソース」コードはすでに構文チェックされており、通常は非常に正確にフォーマットされています。
それらは (アドレスの) シンボル テーブルを構築し、アプリケーションのターゲット言語表現を構築します。通常の困難は、元のコンパイラが多かれ少なかれ元のアプリケーションを最適化する必要があることです。これには、共通の部分式を削除したり、ループから定数コードを巻き上げたり、他の多くの同様の手法を使用したりします。これらは多くの場合、ターゲット言語で表すことができません。
ソースが適切に定義された VM 用である場合、多くの場合、この最適化は JIT コンパイラに委ねられ、結果の逆コンパイルされたコードは非常に読みやすく、多くの場合、元のコードとほとんど同じです。このタイプのコンパイラは、多くの場合、シンボルの一部またはすべてをオブジェクト コードに残し、これらを復元できるようにします。その他には、デバッグやトラブルシューティングに役立つ行番号が含まれています。これらはすべて、元のコードを回復するのに役立ちます。
対抗策として、名前をスクランブルすることによって元のソースの単純な復元を防ぐコードへの変換を意図的に実行するコード難読化ツールがあり、生成されるシーケンス コードを変更し (その結果の意味を変更することなく)、ソース言語がない構造を導入します。同等。