50

Java コードを逆コンパイルするのがいかに簡単かを実感しました。私はネットを検索してきましたが、なぜそんなに簡単なのかわかりません。.class「ファイルを分解できるのはなぜですか?」のようなことをグーグルで検索するたびに。または「なぜJavaはそんなに簡単に逆コンパイルするのですか」、私が得るのは私のコードを簡単に逆コンパイルできるソフトウェアへのリンクだけです。それでは、StackOverflow に話を戻します。C++ やその他の言語は逆コンパイルしにくいのに、なぜ Java は読みやすいソース コードに変換できるのでしょうか。

ありがとう

4

2 に答える 2

58

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

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

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

于 2012-09-16T20:37:44.173 に答える
22

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

于 2012-09-16T20:39:01.447 に答える