逆コンパイラ
機械語を(無理やり)人間語に翻訳するソフトだよ
コンパイラと逆の お仕事をするよ
プログラムからソースコードを取り出すときに使うよ
簡単に書くよ
逆コンパイラ(読:ギャクコンパイラ 英:decompiler)とは
できあがっているプログラムから人間語で書いたプログラムの元ネタ(ソースコード)を取り出すときに使うソフト
であり
コンピュータさんが分かる言葉(機械語)を無理やり人間様が分かる言葉(人間語)に翻訳してくれるソフト
です。
詳しく書くよ
順番に見ていきましょう。
まずは予備知識として
・プログラムの作り方
・ソースコード
・コンパイル
・コンパイラ
・逆コンパイル
について簡単に説明します。
「そんなの説明されなくても知ってるよ!」な人は適当に読み飛ばしてください。
プログラムを作って動かすまでの一般的な流れは
1.人間語でプログラムの元ネタを書く
2.元ネタを人間語から機械語に翻訳する
3.翻訳された指示に従って、コンピュータさんが お仕事する
です。
コンピュータさんは人間語が分かりません。
人間様はコンピュータさんの言葉が分かりません。
プログラムは人間様が作るものです。
そこで最初は人間様が分かる言葉でプログラムを作ります。
コンピュータさんに対する「あれをやれ」「これをやれ」な命令を人間語で書くのです。
次に人間語で書いたプログラムの元ネタをコンピュータさんが分かる言葉に翻訳します。
実際に お仕事をするのは、コンピュータさんですからね。
コンピュータさんが分かる言葉に変換する必要があるのです。
コンピュータさんが分かる言葉に翻訳したので、コンピュータさんは命令の内容を理解できます。
指示に従って、お仕事をしてくれるでしょう。
かなり簡略化した説明ですけどね。
これがプログラムを作るときの流れです。
この話で登場した「人間語で書いたプログラムの元ネタ」を「ソースコード」と言います。
また、ソースコードをコンピュータさんが分かる言葉に翻訳する作業を「コンパイル」と言います。
コンパイルは人間語を機械語に翻訳する作業です。
コンパイルするのがお仕事なプログラムは「コンパイラ」と言います。
コンパイラは人間語を機械語に翻訳してくれるプログラムです。
コンパイルされる前のソースコードは人間語で書かれています。
コンピュータさんが見てもサッパリ分かりません。
コンパイルされたプログラムは機械語に翻訳されています。
人間様が見てもサッパリ分かりません。
コンピュータさんが見て分かるプログラムから人間様が見て分かるソースコードを取り出す作業を「逆コンパイル」と言います。
逆コンパイルは機械語を無理やり人間語に翻訳する作業です。
そのまんまなネーミングですね。
コンパイルの逆の作業だから逆コンパイルです。
コンパイルでやったのは「翻訳」です。
コンパイルしても中に書いてある内容自体は変わっていないはずです。
ということは、コンパイルでやった作業を完全に逆の手順でやれば、機械語のプログラムを人間語のソースコードに戻せるはずです。
そんな理屈で無理やり機械語を人間語に翻訳するのが逆コンパイルです。
以上を踏まえて
逆コンパイルするときに使うソフト
が「逆コンパイラ」です。
逆コンパイラは機械語を無理やり人間語に翻訳してくれます。
これも、そのまんまなネーミングですね。
コンパイラの逆の役割を果たすソフトだから逆コンパイラです。
注意点として、逆コンパイラを使えば完全に元に戻せるわけでは ありません。
プログラミング言語によって、逆コンパイルしやすかったり、しにくかったりします。
また、ソフトの性能やプログラムの作り方によっても変わってくるでしょう。
日本語を英語に翻訳したのを さらに日本語に翻訳すると、ニュアンスや言い回しが変わったりしますよね。
それと同じです。
逆コンパイラで抽出できるのは「それっぽいけど正しいか分からない」ソースコードです。
一言でまとめるよ
まぁ「逆コンパイラ」って単語が出てきたら「プログラムからソースコード
(人間語で書いたプログラムの元ネタ)を取り出すときに使うソフトなんだな~」と お考えください。
おまけ
■訳してみるよ
「逆」は日本語ですね。
「compiler(コンパイラ)」は「compile(コンパイル)」+「er」です。
「compile(コンパイル)」の意味は「1つに集める」とか「編集する」とかです。
接尾辞「er」を付けると「~する人」とか「~するもの」的な意味になります。
何となく くっつけると
逆に編集するやつ
となります。
■検索してみる?






