不同的 Java 字节码反编译为完全相同的 p 代码和 java 代码
Different Java bytecode decompile to exactly the same p-code and java code
我生成了两个 java 字节码文件 1.class and 2.class,如果使用十六进制文件查看器检查它们,它们是不同的:
但是反编译后的p代码都是一样的:
我也可以使用jd-gui将它们反编译成Java源代码,这两个字节码文件再次生成完全相同的Java源代码:
所以看起来一切都很好,但是当我将字节码的两个副本加载到 class 加载器时,1.class 副本给我以下错误:
有人知道吗?
如果使用javap -l
打印出行号信息,可以发现2.class
对于doIt(String, String, AppContext)
有如下行号table:
LineNumberTable:
line 56: 0
line 57: 11
line 58: 19
line 60: 23
line 61: 65
据此,第61行链接到字节码索引65,而同一方法仅由总共64个字节定义。因此,这个 table 不正确并抛出验证器错误。
我生成了两个 java 字节码文件 1.class and 2.class,如果使用十六进制文件查看器检查它们,它们是不同的:
但是反编译后的p代码都是一样的:
我也可以使用jd-gui将它们反编译成Java源代码,这两个字节码文件再次生成完全相同的Java源代码:
所以看起来一切都很好,但是当我将字节码的两个副本加载到 class 加载器时,1.class 副本给我以下错误:
有人知道吗?
如果使用javap -l
打印出行号信息,可以发现2.class
对于doIt(String, String, AppContext)
有如下行号table:
LineNumberTable:
line 56: 0
line 57: 11
line 58: 19
line 60: 23
line 61: 65
据此,第61行链接到字节码索引65,而同一方法仅由总共64个字节定义。因此,这个 table 不正确并抛出验证器错误。