Javaバイトコードの構造を理解しようとしています。メソッドテーブルまではhttp://en.wikipedia.org/wiki/Java_class_fileで説明されているようにすべて流れますが、その後、メソッド本体の間に大きなギャップがあります(逆コンパイルされたメソッド命令に16進コードを渡すことで見つけました)
.....00 0300 0400 0000 00[00 02] - method count
[00 0100 0500 0600 0100 0700 0000 2f00 0100 0100 0000 05] - unexplainable gap
[2a b700 01b1] - method body
method body is
Code:
Stack=1, Locals=1, Args_size=1
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return
同じことが2番目のメソッドの前にもあります(同じバイト文字列ではありませんが、バイトシーケンスとのギャップ)また、メソッドテーブルの後には属性カウントと属性テーブルがありますが、これも解釈できません(ウィキにはこれに関する構造定義はありませんブロック)。
...[00 0000 02] - attribute count
00 0800 0000 0e00 0300 0000 0500 0400 0600 0700 0700 0900 0000 2000 0300 0000 0b00 0a00 0b00 0000 0400 0700 0e00 0f00 0100 0700 0400 1000 0f00 0200 0100 1100 0000 0200 12
この詳細を理解するためのリソースを提供していただけますか?
ソースコードは単純です
package ru.javamining.decompile;
public class ClassA {
public int localStackTest(){
int intVar=1500;
int intVar1 = 198765;
return intVar + intVar1;
}
}