実際、質問は少し広いです。javacがjavaファイルをバイトコード(クラスファイル)にコンパイルすることを私は知っています。したがって、クラスファイルにはjvm命令などが含まれている必要があります。一方、これらの命令を確認する唯一の方法は、javap-cを使用してクラスファイルを逆コンパイルすることです。しかし、それは逆コンパイルではありませんよね?逆コンパイルすると、Javaファイルが生成されるためです。したがって、ここでの私の推測では、javacはjavaファイルを2回(実際には正しくありませんが、簡単にするために仮定します)、最初にjvm命令に、次にバイトコードにコンパイルするので、javap-cはバイトコードからjvm命令に逆コンパイルします。Jvmはバイトコードを理解するはずなので、命令を理解できません。私はここで少し混乱しています。誰かがここで何が起こっているのか説明できますか?
質問する
877 次
2 に答える
5
Javap はバイトコードを逆コンパイルせず、逆アセンブルします。違いを説明するために、用語を逆に切り替えることができます。コンパイルは人間が読めるコードをバイトコードに変換することであり、アセンブリはアセンブリ命令をバイトコードに変換することです。
于 2012-07-26T09:01:12.797 に答える
3
javap
人間が読める形式の JVM 命令を表示します。JVM 命令は、JVM のコードです。javap
表示されるのはアセンブラ言語です。
バイトコードをより読みやすい形式で表示したい場合は、jadなどの Java 逆コンパイラを使用します。Eclipse 用のプラグインを含む、jad 用の UI ラッパーがいくつかあります。
于 2012-07-26T09:02:19.567 に答える