まずは、バイトコードを読むことが出来るプラグインは例えば以下です。
エクリプス■Bytecode Outline plugin
http://eclipsewiki.net/eclipse/?Bytecode%20Outline%20plugin
Jarファイルをダウンロードしてpluginディレクトリに入れるだけ。
使い方も簡単。
[ウィンドウ] - [ビューの表示] - [その他] でビューの表示ウィンドウが開くので[Bytecode Outline]を選択。
あとはJavaファイルを変更するとダイナミックに変更されます。
さて、ちょっと試しに。以下のTestクラスを作ってみます。
構成 | 名前 |
---|---|
クラス | net.kronos_jp.guice.Test |
フィールド | message |
メソッド | String getMessage() void setMessage(String message) |
Javaコード
package net.kronos_jp.guice; public class Test{ private String message; public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } }
このクラスのバイトコードは以下。
バイトコード
// class version 49.0 (49) // access flags 33 public class net/kronos_jp/guice/Test { // compiled from: Test.java // access flags 2 private Ljava/lang/String; message // access flags 1 public <init>()V L0 LINENUMBER 13 L0 ALOAD 0 INVOKESPECIAL java/lang/Object.<init>()V RETURN L1 LOCALVARIABLE this Lnet/kronos_jp/guice/Test; L0 L1 0 MAXSTACK = 1 MAXLOCALS = 1 // access flags 1 public getMessage()Ljava/lang/String; L0 LINENUMBER 17 L0 ALOAD 0 GETFIELD net/kronos_jp/guice/Test.message : Ljava/lang/String; ARETURN L1 LOCALVARIABLE this Lnet/kronos_jp/guice/Test; L0 L1 0 MAXSTACK = 1 MAXLOCALS = 1 // access flags 1 public setMessage(Ljava/lang/String;)V L0 LINENUMBER 20 L0 ALOAD 0 ALOAD 1 PUTFIELD net/kronos_jp/guice/Test.message : Ljava/lang/String; L1 LINENUMBER 21 L1 RETURN L2 LOCALVARIABLE this Lnet/kronos_jp/guice/Test; L0 L2 0 LOCALVARIABLE message Ljava/lang/String; L0 L2 1 MAXSTACK = 2 MAXLOCALS = 2 }
なんか、読めなくもないですね。
それぞれのコマンドをちゃんと調べてみようと思います。(追々)