不同的Java字节码反编译为完全相同的p代码和java代码

时间:2015-01-27 09:30:40

标签: java classloader bytecode java-bytecode-asm

我生成了两个java字节码文件1.class2.class,如果使用hex文件查看器检查它们,它们会有所不同:

enter image description here

然而,反编译的p代码都是相同的:

我也可以使用jd-gui将它们反编译成Java源代码,并再次将两个字节的代码文件生成完全相同的Java源代码:

enter image description here

所以它看起来很好,但是当我将两个字节码副本加载到类加载器中时,1.class副本给出了以下错误:

enter image description here

任何人都有任何线索?

1 个答案:

答案 0 :(得分:3)

如果您使用javap -l打印出行号信息,则可以发现2.class具有doIt(String, String, AppContext)的以下行号表:

LineNumberTable:
  line 56: 0
  line 57: 11
  line 58: 19
  line 60: 23
  line 61: 65

根据这一点,行号61链接到字节码索引65,而相同的方法仅由64字节定义。因此,此表不正确并且抛出验证器错误。