Java中的字节码分析

Pra*_*mha 12 java bytecode bytecode-manipulation java-bytecode-asm

我正在开发一个字节码分析项目,我正在使用ASM.一切都很顺利,我能够成功解析,获得类和方法信息.

但我坚持理解泛型的字节码表示.下面是一个例子java.util.list,当我使用visitMethodClassVisitor打印的信息,这是我得到的方法的签名之一:

(ILjava/util/Collection<+TE;>;)Z
Run Code Online (Sandbox Code Playgroud)

在这里,我试图逐个反汇编并理解方法的参数:

  • I 代表int
  • Ljava/util/Collection 代表它是一种类型的论证 Collection

但我被困在仿制药类型<+TE>等等.任何人都可以指导我吗?我试图搜索但没有得到足够的信息.如果有人有字节码名称列表,请分享一下吗?

Ren*_*ink 12

+代表通用extends,而TE意味着是一种变种E

因此在源代码中它看起来像:

 Collection<? extends E>   -> Ljava/util/Collection<+TE;>
Run Code Online (Sandbox Code Playgroud)

请参阅asm用户指南部分4.1.1泛型 - >元数据