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

标签 java classloader bytecode java-bytecode-asm

我生成了两个java字节码文件1.class2.class ,如果使用十六进制文件查看器检查它们,它们是不同的:

enter image description here

但是反编译后的 p-code 都是一样的:

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

enter image description here

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

enter image description here

有人知道吗?

最佳答案

如果使用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/

相关文章:

java - 在不修改 catalina.sh 的情况下设置 Java/Tomcat 堆大小(Xmx)

java - 编译多模块maven项目而不安装到本地存储库

java - 是否可以使用 ByteBuddy 更改注释的值?

java - ServletRegistrationBean 是否为每个注册的子 WebApplicationContext 使用不同的类加载器

java - Byte Buddy installOn API 给出错误 : adding retransformable transformers is not supported?

java - 在方法调用中访问变量/常量值

java - 无法刷新注入(inject)到 JSF 2 Managed Bean 中的 JPA 2 实体

java - 一个有用的指标,用于确定 JVM 何时将陷入内存/GC 故障

Java 类加载器 : why search the parent classloader first?

java - 如何使用类加载器从服务器加载类文件到客户端