読み方 : ぎゃくコンパイル

逆コンパイル【decompile】デコンパイル

逆コンパイルとは?

実行可能形式のコンピュータプログラムを解析し、開発時に用いられたプログラミング言語によるソースコードへ逆変換する処理のこと。コンパイルとは逆方向の処理にあたり、実行形式のプログラムから元の設計図に相当するコードを復元する試みとして行われる。
逆コンパイルのイメージ画像

一般的なソフトウェア開発では、人間が理解しやすい高水準言語ソースコードを記述し、これを「コンパイラ」(compiler)と呼ばれるソフトウェアによってコンピュータが解釈しやすいオブジェクトコード機械語コードや中間コード)に変換して配布する。逆コンパイルはこの過程を反転させ、オブジェクトコードを解析して元のソースコードへの復元を試みる処理である。専用の「逆コンパイラ」(decompiler)というソフトウェアによって実施する。

コンパイルは、開発元からソースコードの提供を受けられず実行形式のコードしか入手できない状況で、プログラムの挙動を詳細に調べる必要がある場合などに行われる。製品のソースコードが紛失した際の復旧作業、他社製品の動作原理を調べる「リバースエンジニアリング」(reverse engineering)、脆弱性マルウェアの不正な挙動を解明するセキュリティ解析など、様々な場面で利用されている。

多くの場合、逆コンパイルによって得られるソースコードは、元のソースコードと完全に一致するわけではない。オブジェクトコード中には、変数名や関数名といった識別子、コメントなど実行時に不要な情報が破棄されていることが多く、失われた内容を復元することはできない。逆コンパイルは、機械的に生成した名称を変数名や関数名に割り当てることで、便宜的に読み取り可能な形に仕上げている。

また、コンパイラによる最適化処理により、ソースコードの実質的な処理内容を維持したまま、命令の並び替えや不要コードの削除などを経て別の構造に置き換えられている場合もある。この場合、逆コンパイルを行っても最適化後のコードが復元されるに留まり、元の記述とは異なる結果になる。一方、Javaバイトコードや.NETの共通中間言語CIL)のように、特定の仮想マシン向けに生成された中間コードを対象とする場合は、比較的高い精度で元の構造に近いコードを復元できる場合もある。

コンパイルは解析目的で広く利用される一方、市販のソフトウェアを改造してライセンス認証を無効化したり、独自のアルゴリズムを盗用したりする目的で悪用される懸念もある。そのため、多くの商業ソフトウェアでは利用規約によって逆コンパイルを禁止しており、コードの解析を妨げる難読化ツールなどの対策が導入される場合もある。

(2026.6.26更新)

他の辞典等による「逆コンパイル」の解説 (外部サイト)

この記事の著者 : (株)インセプト IT用語辞典 e-Words 編集部
1997年8月より「IT用語辞典 e-Words」を執筆・編集しています。累計公開記事数は1万ページ以上、累計サイト訪問者数は1億人以上です。学術論文や官公庁の資料などへも多数の記事が引用・参照されています。