我试图弄清楚java字节码的结构。直到方法表都按照http://en.wikipedia.org/wiki/Java_class_file中的描述流动,但在那之后,方法体之间存在巨大差距(我通过传递反编译方法指令的十六进制代码发现)
.....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
同样的事情发生在第二种方法之前(不是相同的字节字符串,但与字节序列有间隙)在方法表之后还有属性计数和属性表,我也无法解释(在wiki中没有结构定义)堵塞)。
...[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;
}
}