Here是关于INVOKESPECIAL字节码指令的参考。如果我有一个包含INVOKESPECIAL指令的ASM框架中的AbstractInsnNode,我的节点是否会包含指令的方法规范? 例如,使用如下代码:
String ins = insn.toString;
如果insn有一个INVOKESPECIAL指令,我的ins会有一个字符串,如" invokespecial java / lang / StringBuffer /()V"?
我想要做的是从INVOKESPECIAL指令获取方法规范并将其存储在字符串中,以便我的程序可以读取它。
答案 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”的字符串?
实际上,有三个组成部分。方法描述符字符串,方法名称和拥有(在本例中为实际)方法的类的内部名称。