前言

除了JavaParser另一种可以用来分析Java代码的工具。


安装依赖

通过maven下载依赖:

<dependency>
    <groupId>org.ow2.asm</groupId>
    <artifactId>asm</artifactId>
    <version>9.3</version>
</dependency>

试用

写一个ClassVisitor用于访问类:

public class MyClassVisitor extends ClassVisitor {
    public MyClassVisitor(int api) {
        super(api);
    }

    @Override
    public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) {
        System.out.println(version);
        System.out.println(access);
        System.out.println(name);
        System.out.println(signature);
        System.out.println(superName);
        System.out.println(Arrays.toString(interfaces));
        super.visit(version, access, name, signature, superName, interfaces);
    }
}

然后随便找一个类来测试:

try {
    ClassReader classReader = new ClassReader("java.util.HashMap");
    ClassVisitor classVisitor = new MyClassVisitor(Opcodes.ASM6);
    classReader.accept(classVisitor, ClassReader.EXPAND_FRAMES);
}catch (Exception e) {
    e.printStackTrace();
}

解析结果:

52
33
java/util/HashMap
<K:Ljava/lang/Object;V:Ljava/lang/Object;>Ljava/util/AbstractMap<TK;TV;>;Ljava/util/Map<TK;TV;>;Ljava/lang/Cloneable;Ljava/io/Serializable;
java/util/AbstractMap
[java/util/Map, java/lang/Cloneable, java/io/Serializable]

可以获取该类父类接口之类的信息。

分析


参考


Web Java

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!

Java Tomcat Valve内存马
Java Native 源码观摩