字节码和ASM

时间:2013-01-14 02:49:23

标签: java bytecode descriptor

Here是关于INVOKESPECIAL字节码指令的参考。如果我有一个包含INVOKESPECIAL指令的ASM框架中的AbstractInsnNode,我的节点是否会包含指令的方法规范? 例如,使用如下代码:

String ins = insn.toString;

如果insn有一个INVOKESPECIAL指令,我的ins会有一个字符串,如" invokespecial java / lang / StringBuffer /()V"?

我想要做的是从INVOKESPECIAL指令获取方法规范并将其存储在字符串中,以便我的程序可以读取它。

2 个答案:

答案 0 :(得分:0)

您想在运行时读取类吗?试试这个

    import org.objectweb.asm.ClassReader;
    import org.objectweb.asm.util.ASMifierClassVisitor;


    ClassReader cr = new ClassReader(b);
    cr.accept(new ASMifierClassVisitor(new PrintWriter(System.out)), 0);

答案 1 :(得分:0)

  

如果我有来自包含INVOKESPECIAL指令的ASM框架的AbstractInsnNode,我的节点是否会包含该指令的方法规范?

AFAIK,是的。它应该是MethodInsnNode的实例,desc字段应该是方法描述符字符串。

  

如果insn有一个INVOKESPECIAL指令,我的ins会有一个像“invokespecial java / lang / StringBuffer /()V”的字符串?

实际上,有三个组成部分。方法描述符字符串,方法名称和拥有(在本例中为实际)方法的类的内部名称。