博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java ASM 分析类
阅读量:6938 次
发布时间:2019-06-27

本文共 3413 字,大约阅读时间需要 11 分钟。

hot3.png

实现ClassVisitor接口

package com.uwo.resources.asm.test;import org.objectweb.asm.*;/** * Created by yanhao on 2017/5/15. */public class UwoClassVisitor implements ClassVisitor{    public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) {        System.out.println("visit");    }    public void visitOuterClass(String owner, String name, String desc) {        System.out.println("visitOuterClass");    }    public void visitInnerClass(String name, String outerName, String innerName, int access) {        System.out.println("visitInnerClass");    }    public void visitAttribute(Attribute attr) {        System.out.println("visitAttribute");    }    public void visitSource(String source, String debug) {        System.out.println("visitSource");    }    public AnnotationVisitor visitAnnotation(String desc, boolean visible) {        System.out.println("Annotation===========start==========");        System.out.println("Annotation desc = " + desc);        System.out.println("Annotation visible = " + visible);        System.out.println("Annotation===========end==========");        return null;    }    public FieldVisitor visitField(int access, String name, String desc, String signature, Object value) {        System.out.println("Field===========start==========");        System.out.println("Field access = " + access);        System.out.println("Field name = " + name);        System.out.println("Field desc = " + desc);        System.out.println("Field signature = " + signature);        System.out.println("Field value = " + value);        System.out.println("Field===========end==========");        return null;    }    public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {        System.out.println("Method===========start==========");        System.out.println("Method access = " + access);        System.out.println("Method name = " + name);        System.out.println("Method desc = " + desc);        System.out.println("Method signature = " + signature);        System.out.println("Method exceptions = " + exceptions);        System.out.println("Method===========end==========");        return null;    }    public void visitEnd() {        System.out.println("visitEnd");    }}

执行代码

try {    ClassReader cr = new ClassReader(Uwo.class.getName());    cr.accept(new UwoClassVisitor(), 0);} catch (IOException e) {    e.printStackTrace();}

执行结果

visitvisitSourceField===========start==========Field access = 4Field name = nameField desc = Ljava/lang/String;Field signature = nullField value = nullField===========end==========Field===========start==========Field access = 4Field name = sexField desc = Ljava/lang/Integer;Field signature = nullField value = nullField===========end==========Method===========start==========Method access = 1Method name = 
Method desc = (Ljava/lang/String;)VMethod signature = nullMethod exceptions = nullMethod===========end==========Method===========start==========Method access = 1Method name = helloMethod desc = (Ljava/lang/String;)Ljava/lang/String;Method signature = nullMethod exceptions = nullMethod===========end==========Method===========start==========Method access = 1Method name = runMethod desc = ()VMethod signature = nullMethod exceptions = nullMethod===========end==========visitEnd

转载于:https://my.oschina.net/yan5845hao/blog/900182

你可能感兴趣的文章
关于Linux的内存(free -m)
查看>>
修改linux系统配置文件 /etc/inittab 默认从字符界面启动系统
查看>>
Servlet过滤器和监听器知识总结
查看>>
Android(杂项)
查看>>
vSphere之安装VMware ESXi 6
查看>>
MyEclipse定位class文件
查看>>
一个用于监控Dell PowerEdge服务器硬件状态的nagios/icinga插件
查看>>
我的友情链接
查看>>
Xshell连接Ubuntu
查看>>
进阶之初探nodeJS
查看>>
Mac OS X添加网络打印机
查看>>
五个典型的JavaScript面试题
查看>>
如何搭建搭建各个版本的openstack的本地yum源?
查看>>
CentOS6.8下搭建Ipsec+L2TP ***服务
查看>>
linux基本命令
查看>>
mysql主从延迟
查看>>
不在让你为你写代码头疼的链接页代码
查看>>
Vmware clone后,linux无法上网
查看>>
NetSuite crm国内合作商来讲讲NetSuite常见问题
查看>>
我的友情链接
查看>>