package javaParsar;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;
import java.io.IOException;
public class BytecodeAnalyzer {
public static void main(String[] args) throws IOException {
// 读取类的字节码
ClassReader classReader = new ClassReader(ClassASM.class.getName());
// 创建一个ClassVisitor
ClassVisitor classVisitor = new ClassVisitor(Opcodes.ASM9) {
@Override
public MethodVisitor visitMethod(int access, String name, String descriptor, String signature, String[] exceptions) {
MethodVisitor methodVisitor = super.visitMethod(access, name, descriptor, signature, exceptions);
// 仅处理非构造函数的方法
if (!name.equals("<init>")) {
System.out.println("Method: " + name);
// 创建一个MethodVisitor访问方法的字节码
MethodVisitor mv = new MethodVisitor(Opcodes.ASM9, methodVisitor) {
@Override
public void visitMethodInsn(int opcode, String owner, String name, String descriptor, boolean isInterface) {
System.out.println(" Invoke: " + owner + "." + name +"-"+ descriptor);
super.visitMethodInsn(opcode, owner, name, descriptor, isInterface);
}
};
return mv;
}
return methodVisitor;
}
};
// 分析类的字节码
classReader.accept(classVisitor, ClassReader.EXPAND_FRAMES);
}
}
asm调用链路
最新推荐文章于 2024-07-15 22:27:12 发布