web-dev-qa-db-ja.com

Javaコードの逆コンパイルがとても簡単なのはなぜですか?

だから私は自分のJavaコードを逆コンパイルするのがいかに簡単かを理解しました。私はネットを検索していて、理解できないようです[〜#〜 ] why [〜#〜]とても簡単です。「なぜ逆コンパイルできるのか.classfiles?」または「なぜJava逆コンパイルがとても簡単なのか」、私が得るのは、コードを簡単に逆コンパイルできるソフトウェアへのリンクだけです。そこで、StackOverflowに目を向けます。 Javaは、読みやすいソースコードに戻すことができますが、C++やその他の言語は逆コンパイルにあまり適していませんか?

ありがとう

49
user818502

Javaバイトコードはアセンブリよりもソースに近い(より類似している)ためです。

特に、 .classファイルには、クラス名、メソッド名、フィールドとパラメーターのタイプなどのメタデータが含まれます。
a Java(または.Net)デコンパイラーが行う必要があるのは、各メソッド本体の命令を調べて、それらを適切な構文構造に変換することだけです。

対照的に、C++のようなネイティブ言語にはメタデータがまったく含まれていないため、逆コンパイラーはすべてを再構築する必要があります。

58
SLaks

Javaは、元のJavaコードに含まれる大量の情報を保持する中間形式のJVMバイトコードにコンパイルされます。C++のような言語はアセンブリコードにコンパイルされ、外観は大きく異なります。元のコードであるため、元に戻すのは困難です。

22
dhg