[ 通常表示 ]  [ 簡易表示 ]  [ シンプル表示 ]

「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典イメージぴよ画像「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

デコンパイル (decompile)

pointこの用語のポイント

pointコンパイルの逆だよ

point機械語を(無理やり)人間語に翻訳するよ

pointプログラムからソースコードを取り出すよ

スポンサーリンク

簡単に書くよ

デコンパイル (decompile)とは

「逆コンパイル」のこと。
つまり

コンピュータさんが分かる言葉(機械語)を無理やり人間様が分かる言葉(人間語)に翻訳することによって、できあがっているプログラムからソースコード(プログラムの元ネタ)を取り出すこと
です。

image piyo

詳しく書くよ

順番に見ていきましょう。
まずは予備知識として、プログラムを作る一般的な流れと「ソースコード」あとは「コンパイル」について簡単に説明します。
「そんなの説明されなくても知ってるよ!」な人は、適当に読み飛ばしてください。

プログラムを作って動かすまでの一般的な流れは

1.人間語でプログラムの元ネタを書く
2.元ネタを人間語から機械語に翻訳する
3.翻訳された指示に従ってコンピュータさんがお仕事する


です。

デコンパイル

コンピュータさんは人間語が分かりません。

デコンパイル2

一方、人間様はコンピュータさんの言葉が分かりません。

デコンパイル3

プログラムは人間様が作る物です。
そこで、最初は人間様が分かる言葉でプログラムを作ります。
コンピュータさんに対する「あれをやれ」「これもやって」な命令を人間語で書くのです。

デコンパイル4

次に人間語で書いたプログラムの元ネタをコンピュータさんが分かる言葉に翻訳します。
実際に仕事をするのはコンピュータさんです。
コンピュータさんが命令の内容を理解してくれないと話になりませんからね。

デコンパイル5

コンピュータさんが分かる言葉に翻訳したので、これでコンピュータさんは命令の内容を理解できます。
指示に従って、お仕事をしてくれるでしょう。

デコンパイル6

かなり簡略化した説明ですが、これがプログラムを作る際の流れです。

この話で登場した「人間語で書いたプログラムの元ネタ」を「ソースコード」と言います。

デコンパイル7

また「人間語で書いたプログラムの元ネタをコンピュータさんが分かる言葉に翻訳する作業」は「コンパイル」と言います。
コンパイルは人間語を機械語に翻訳する作業です。

デコンパイル8

コンパイルされる前のソースコードは人間語で書かれています。
コンピュータさんが見てもサッパリ分かりません。

デコンパイル9

コンパイルされたプログラムは機械語に翻訳されています。
人間様が見てもサッパリ分かりません。

デコンパイル10

以上を踏まえて、機械語を無理やり人間語に翻訳して、プログラムからソースコードを取り出す作業が「デコンパイル」です。
逆コンパイル」と呼ばれる場合もあります。

デコンパイル11

コンパイルで行ったのは「翻訳」です。
コンパイルをしても中に書いてある内容自体は変わっていないはずです。
ということは、コンパイルで行った作業を完全に逆の手順で行えば、機械語のプログラムを人間語のソースコードに戻せるはずです。

そんな理屈で無理やり機械語を人間語に翻訳するのがデコンパイルです。

デコンパイルする際には、専用のソフトを使うのが一般的です。
このソフトは「デコンパイラ」と呼ばれたりします。

デコンパイル12

注意点として、ソフトを使えば完全に元に戻せるわけでは、ありません。
プログラミング言語によって、デコンパイルしやすかったり、しにくかったりします。
また、ソフトの性能やプログラムの作り方によっても変わってくるでしょう。

日本語を英語に翻訳して、それをさらに日本語に翻訳すると、ニュアンスや言い回しが変わってしまったりしますよね。
それと同じです。

個人的には、お勉強や解析目的でデコンパイルするのは有用だと思っています。
抽出したソースコードを流用する目的でやるのは、現実的ではない気がします。

抽出できるのは「それっぽいけど正しいか分からない」ソースコードです。
実用に耐えるかという点で、疑問を感じます。

目的は人それぞれでしょうけどね。
私は解析目的で行う作業だと理解しています。

image piyo2

一言でまとめるよ

まぁ「デコンパイル」って単語が出てきたら「プログラムからソースコードを取り出すことなんだな~」と、お考えください。

一番上に戻るよ
スポンサーリンク