我生成了两个java字节码文件1.class和 2.class ,如果使用十六进制文件查看器检查它们,它们是不同的:
但是反编译后的 p-code 都是一样的:
我还可以使用 jd-gui 将它们反编译成 Java 源代码,然后这两个字节码文件再次生成完全相同的 Java 源代码:
所以看起来一切都很好,但是当我将字节码的两个副本加载到类加载器时,1.class 副本给我以下错误:
有人知道吗?
最佳答案
如果使用javap -l
打印出行号信息,可以发现2.class
有如下行号表doIt(String,字符串,AppContext)
:
LineNumberTable:
line 56: 0
line 57: 11
line 58: 19
line 60: 23
line 61: 65
据此,第 61 行链接到字节码索引 65,而同一方法仅由总共 64 个字节定义。因此,该表不正确,并抛出 validator 错误。
关于java - 不同的 Java 字节码反编译为完全相同的 p 代码和 java 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28167072/