逆
コンパイラ(ぎゃく
コンパイラ、英: Decompiler)は、
機械語で書かれたオブジェクトコードを解析し、理解しやすい形の
ソースコードを生成するプログラムを指します。プログラマーは通常、
高水準言語であるCや
Javaなどを用いてプログラムを書きますが、そのコードは
コンパイラを通して
機械語に変換され、
コンピュータが実行可能なオブジェクトコードが作成されます。このプロセスを「コンパイル」と呼びます。逆コンパイルは、その名の通りコンパイルの逆の操作を行うものであり、オブジェクトコードを基に元の
ソースコードに近い形を再構築します。
「逆」という名前が表すように、逆
コンパイラはあくまでオブジェクトコードの解析を行いますが、この過程ではオリジナルの
ソースコードの一部情報が失われるため、元のプログラムを完全に再構築することは難しいのが現実です。具体的には、変数名やコメント、制御構文の一部などは、コンパイルの過程で不可逆的に削除されてしまうことがあります。
しかし、逆コンパイルが特に効果的なのは、
Javaやその周辺の技術、つまり仮想マシンによって実行されるバイトコードにおいてです。これらの場合、元の
ソースコードに比較的近い形で復元できる場合があり、「
Java Decompiler」などの専用ソフトウェアを利用することで、高度な復元が可能になることがあります。
法的規制とその影響
近年、日本では平成30年に著作権法が改正され、柔軟な権利制限規定が導入されました。これにより、ソフトウェアの開発者が定める利用規約において逆コンパイルや
リバースエンジニアリングが禁止されていても、それが著作権侵害と見なされない場合があると解されています。ただし、規約との関係には注意が必要です。
また、EUでは現行の「Directive on the legal protection of computer programs」において、逆コンパイルは特定の条件下で権利者の許可を受けずに行っても良いとされています。第6条では、逆コンパイルに申し込む際の条件が示され、第9条ではこれに反する契約条項は無効であるとされています。
さまざまな逆
コンパイラが存在し、用途に応じて使い分けられています。
- - .NET Reflector: .NETコードの逆コンパイルに特化したツール。
- - REC Studio 4: 逆コンパイラとしては使いやすい設計がされています。
- - Boomerang Decompiler: オープンソースとして提供されている。
- - JAD: Javaプログラム向けの逆コンパイラとして広く知られています。
- - JEB Decompiler: AndroidやIntelアーキテクチャ、WebAssembly、Ethereumなどのコードの逆コンパイルに対応。
逆
コンパイラは、プログラムの解析やセキュリティ、
リバースエンジニアリングなど、様々な分野で用いられており、その重要性はますます高まっています。また、プログラムの開発や改善に寄与するための強力なツールでもあります。