类 AsmUtils

java.lang.Object
com.alibaba.bytekit.utils.AsmUtils

public class AsmUtils extends Object
作者:
hengyunabc
  • 构造器概要

    构造器
    构造器
    说明
     
  • 方法概要

    修饰符和类型
    方法
    说明
    static void
    addField(com.alibaba.deps.org.objectweb.asm.tree.ClassNode classNode, com.alibaba.deps.org.objectweb.asm.tree.FieldNode fieldNode)
     
    static void
    addMethod(com.alibaba.deps.org.objectweb.asm.tree.ClassNode classNode, com.alibaba.deps.org.objectweb.asm.tree.MethodNode methodNode)
     
    static String
    className(byte[] classBytes)
     
    static boolean
    containsMethodInsnNode(com.alibaba.deps.org.objectweb.asm.tree.MethodNode methodNode, String owner, String name)
     
    static com.alibaba.deps.org.objectweb.asm.tree.ClassNode
    copy(com.alibaba.deps.org.objectweb.asm.tree.ClassNode source)
     
    static com.alibaba.deps.org.objectweb.asm.tree.MethodNode
    copy(com.alibaba.deps.org.objectweb.asm.tree.MethodNode source)
     
    static int
    如果成功获取,返回大于 0 的值
    static com.alibaba.deps.org.objectweb.asm.tree.FieldNode
    findField(List<com.alibaba.deps.org.objectweb.asm.tree.FieldNode> fields, String name)
     
    static com.alibaba.deps.org.objectweb.asm.tree.MethodNode
    findFirstMethod(Collection<com.alibaba.deps.org.objectweb.asm.tree.MethodNode> methodNodes, String name)
     
    static com.alibaba.deps.org.objectweb.asm.tree.AbstractInsnNode
    findInitConstructorInstruction(com.alibaba.deps.org.objectweb.asm.tree.MethodNode methodNode)
     
    static com.alibaba.deps.org.objectweb.asm.tree.MethodNode
    findMethod(Collection<com.alibaba.deps.org.objectweb.asm.tree.MethodNode> methodNodes, com.alibaba.deps.org.objectweb.asm.tree.MethodNode target)
     
    static com.alibaba.deps.org.objectweb.asm.tree.MethodNode
    findMethod(Collection<com.alibaba.deps.org.objectweb.asm.tree.MethodNode> methodNodes, String name, String desc)
     
    static List<com.alibaba.deps.org.objectweb.asm.tree.MethodInsnNode>
    findMethodInsnNode(com.alibaba.deps.org.objectweb.asm.tree.MethodNode methodNode, String owner, String name)
     
    static List<com.alibaba.deps.org.objectweb.asm.tree.MethodInsnNode>
    findMethodInsnNode(com.alibaba.deps.org.objectweb.asm.tree.MethodNode methodNode, String owner, String name, String desc)
     
    static List<com.alibaba.deps.org.objectweb.asm.tree.MethodInsnNode>
    findMethodInsnNodeWithPrefix(com.alibaba.deps.org.objectweb.asm.tree.MethodNode methodNode, String prefix)
     
    static List<com.alibaba.deps.org.objectweb.asm.tree.MethodNode>
    findMethods(Collection<com.alibaba.deps.org.objectweb.asm.tree.MethodNode> methodNodes, String name)
     
    static boolean
    fitCurrentJvmMajorVersion(com.alibaba.deps.org.objectweb.asm.tree.ClassNode classNode)
    检查当前的字节码版本是否适配
    static void
    fixConstructorExceptionTable(com.alibaba.deps.org.objectweb.asm.tree.MethodNode methodNode)
     
    static void
    fixMajorVersion(com.alibaba.deps.org.objectweb.asm.tree.ClassNode classNode)
     
    static int
    getMajorVersion(int version)
    Java ClassFile versions (the minor version is stored in the 16 most significant bits, and the major version in the 16 least significant bits).
    getParameterNames(com.alibaba.deps.org.objectweb.asm.tree.MethodNode methodNode)
     
    static String
     
    static String
     
    static boolean
    isAbstract(com.alibaba.deps.org.objectweb.asm.tree.MethodNode methodNode)
     
    static boolean
    isConstructor(com.alibaba.deps.org.objectweb.asm.tree.MethodNode methodNode)
     
    static boolean
     
    static boolean
    isNative(com.alibaba.deps.org.objectweb.asm.tree.MethodNode methodNode)
     
    static boolean
    isStatic(com.alibaba.deps.org.objectweb.asm.tree.MethodInsnNode methodInsnNode)
     
    static boolean
    isStatic(com.alibaba.deps.org.objectweb.asm.tree.MethodNode methodNode)
     
    static com.alibaba.deps.org.objectweb.asm.tree.ClassNode
    loadClass(Class<?> clazz)
     
    static String
    methodDeclaration(com.alibaba.deps.org.objectweb.asm.tree.MethodInsnNode methodInsnNode)
     
    static String
    methodDeclaration(com.alibaba.deps.org.objectweb.asm.Type owner, com.alibaba.deps.org.objectweb.asm.tree.MethodNode methodNode)
     
    static com.alibaba.deps.org.objectweb.asm.tree.MethodNode
    newMethodNode(com.alibaba.deps.org.objectweb.asm.tree.MethodNode source)
     
    static com.alibaba.deps.org.objectweb.asm.tree.ClassNode
    removeJSRInstructions(com.alibaba.deps.org.objectweb.asm.tree.ClassNode classNode)
     
    static com.alibaba.deps.org.objectweb.asm.tree.MethodNode
    removeJSRInstructions(com.alibaba.deps.org.objectweb.asm.tree.MethodNode subjectMethod)
     
    static void
    removeLineNumbers(com.alibaba.deps.org.objectweb.asm.tree.ClassNode classNode)
     
    static com.alibaba.deps.org.objectweb.asm.tree.MethodNode
    removeLineNumbers(com.alibaba.deps.org.objectweb.asm.tree.MethodNode methodNode)
     
    static byte[]
    renameClass(byte[] classBytes, String newClassName)
     
    static com.alibaba.deps.org.objectweb.asm.tree.ClassNode
    renameClass(com.alibaba.deps.org.objectweb.asm.tree.ClassNode classNode, String newClassName)
     
    static void
    replaceMethod(com.alibaba.deps.org.objectweb.asm.tree.ClassNode classNode, com.alibaba.deps.org.objectweb.asm.tree.MethodNode methodNode)
     
    static int
    setMajorVersion(int version, int majorVersion)
    替换掉完整 version里的 major version
    static String
    toASMCode(byte[] bytecode)
     
    static String
    toASMCode(byte[] bytecode, boolean debug)
     
    static String
    toASMCode(com.alibaba.deps.org.objectweb.asm.tree.ClassNode classNode)
     
    static String
    toASMCode(com.alibaba.deps.org.objectweb.asm.tree.MethodNode methodNode)
     
    static byte[]
    toBytes(com.alibaba.deps.org.objectweb.asm.tree.ClassNode classNode)
     
    static byte[]
    toBytes(com.alibaba.deps.org.objectweb.asm.tree.ClassNode classNode, ClassLoader classLoader, com.alibaba.deps.org.objectweb.asm.ClassReader classReader)
    Generate class bytes from class node.
    static com.alibaba.deps.org.objectweb.asm.tree.ClassNode
    toClassNode(byte[] classBytes)
     
    static com.alibaba.deps.org.objectweb.asm.ClassReader
    toClassNode(byte[] classBytes, com.alibaba.deps.org.objectweb.asm.tree.ClassNode classNode)
     
    static String
    uniqueNameForMethod(String className, String methodName, String desc)
     
    static void
    updateMajorVersion(com.alibaba.deps.org.objectweb.asm.tree.ClassNode from, com.alibaba.deps.org.objectweb.asm.tree.ClassNode to)
    比如两份字节码的 major version,如果 from 的比 to 的要高,则设置 to 的 major version 为 from的 major version

    从类继承的方法 java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • 构造器详细资料

    • AsmUtils

      public AsmUtils()
  • 方法详细资料

    • loadClass

      public static com.alibaba.deps.org.objectweb.asm.tree.ClassNode loadClass(Class<?> clazz) throws IOException
      抛出:
      IOException
    • toClassNode

      public static com.alibaba.deps.org.objectweb.asm.tree.ClassNode toClassNode(byte[] classBytes)
    • toClassNode

      public static com.alibaba.deps.org.objectweb.asm.ClassReader toClassNode(byte[] classBytes, com.alibaba.deps.org.objectweb.asm.tree.ClassNode classNode)
    • toBytes

      public static byte[] toBytes(com.alibaba.deps.org.objectweb.asm.tree.ClassNode classNode, ClassLoader classLoader, com.alibaba.deps.org.objectweb.asm.ClassReader classReader)
      Generate class bytes from class node.
      NOTE: must pass origin classReader for bytecode optimizations, avoiding JVM metaspace OOM.
      参数:
      classNode -
      classLoader -
      classReader - origin class reader
      返回:
    • toBytes

      public static byte[] toBytes(com.alibaba.deps.org.objectweb.asm.tree.ClassNode classNode)
    • renameClass

      public static com.alibaba.deps.org.objectweb.asm.tree.ClassNode renameClass(com.alibaba.deps.org.objectweb.asm.tree.ClassNode classNode, String newClassName)
    • renameClass

      public static byte[] renameClass(byte[] classBytes, String newClassName)
    • replaceMethod

      public static void replaceMethod(com.alibaba.deps.org.objectweb.asm.tree.ClassNode classNode, com.alibaba.deps.org.objectweb.asm.tree.MethodNode methodNode)
    • toASMCode

      public static String toASMCode(byte[] bytecode) throws IOException
      抛出:
      IOException
    • toASMCode

      public static String toASMCode(byte[] bytecode, boolean debug) throws IOException
      抛出:
      IOException
    • toASMCode

      public static String toASMCode(com.alibaba.deps.org.objectweb.asm.tree.ClassNode classNode)
    • toASMCode

      public static String toASMCode(com.alibaba.deps.org.objectweb.asm.tree.MethodNode methodNode)
    • newMethodNode

      public static com.alibaba.deps.org.objectweb.asm.tree.MethodNode newMethodNode(com.alibaba.deps.org.objectweb.asm.tree.MethodNode source)
    • removeJSRInstructions

      public static com.alibaba.deps.org.objectweb.asm.tree.MethodNode removeJSRInstructions(com.alibaba.deps.org.objectweb.asm.tree.MethodNode subjectMethod)
    • removeJSRInstructions

      public static com.alibaba.deps.org.objectweb.asm.tree.ClassNode removeJSRInstructions(com.alibaba.deps.org.objectweb.asm.tree.ClassNode classNode)
    • removeLineNumbers

      public static com.alibaba.deps.org.objectweb.asm.tree.MethodNode removeLineNumbers(com.alibaba.deps.org.objectweb.asm.tree.MethodNode methodNode)
    • removeLineNumbers

      public static void removeLineNumbers(com.alibaba.deps.org.objectweb.asm.tree.ClassNode classNode)
    • findFirstMethod

      public static com.alibaba.deps.org.objectweb.asm.tree.MethodNode findFirstMethod(Collection<com.alibaba.deps.org.objectweb.asm.tree.MethodNode> methodNodes, String name)
    • findMethods

      public static List<com.alibaba.deps.org.objectweb.asm.tree.MethodNode> findMethods(Collection<com.alibaba.deps.org.objectweb.asm.tree.MethodNode> methodNodes, String name)
    • findMethod

      public static com.alibaba.deps.org.objectweb.asm.tree.MethodNode findMethod(Collection<com.alibaba.deps.org.objectweb.asm.tree.MethodNode> methodNodes, com.alibaba.deps.org.objectweb.asm.tree.MethodNode target)
    • findMethod

      public static com.alibaba.deps.org.objectweb.asm.tree.MethodNode findMethod(Collection<com.alibaba.deps.org.objectweb.asm.tree.MethodNode> methodNodes, String name, String desc)
    • findInitConstructorInstruction

      public static com.alibaba.deps.org.objectweb.asm.tree.AbstractInsnNode findInitConstructorInstruction(com.alibaba.deps.org.objectweb.asm.tree.MethodNode methodNode)
    • findMethodInsnNodeWithPrefix

      public static List<com.alibaba.deps.org.objectweb.asm.tree.MethodInsnNode> findMethodInsnNodeWithPrefix(com.alibaba.deps.org.objectweb.asm.tree.MethodNode methodNode, String prefix)
    • findMethodInsnNode

      public static List<com.alibaba.deps.org.objectweb.asm.tree.MethodInsnNode> findMethodInsnNode(com.alibaba.deps.org.objectweb.asm.tree.MethodNode methodNode, String owner, String name)
    • findMethodInsnNode

      public static List<com.alibaba.deps.org.objectweb.asm.tree.MethodInsnNode> findMethodInsnNode(com.alibaba.deps.org.objectweb.asm.tree.MethodNode methodNode, String owner, String name, String desc)
    • containsMethodInsnNode

      public static boolean containsMethodInsnNode(com.alibaba.deps.org.objectweb.asm.tree.MethodNode methodNode, String owner, String name)
    • isStatic

      public static boolean isStatic(com.alibaba.deps.org.objectweb.asm.tree.MethodNode methodNode)
    • isStatic

      public static boolean isStatic(com.alibaba.deps.org.objectweb.asm.tree.MethodInsnNode methodInsnNode)
    • isAbstract

      public static boolean isAbstract(com.alibaba.deps.org.objectweb.asm.tree.MethodNode methodNode)
    • isConstructor

      public static boolean isConstructor(com.alibaba.deps.org.objectweb.asm.tree.MethodNode methodNode)
    • isNative

      public static boolean isNative(com.alibaba.deps.org.objectweb.asm.tree.MethodNode methodNode)
    • getParameterNames

      public String[] getParameterNames(com.alibaba.deps.org.objectweb.asm.tree.MethodNode methodNode)
    • copy

      public static com.alibaba.deps.org.objectweb.asm.tree.MethodNode copy(com.alibaba.deps.org.objectweb.asm.tree.MethodNode source)
    • copy

      public static com.alibaba.deps.org.objectweb.asm.tree.ClassNode copy(com.alibaba.deps.org.objectweb.asm.tree.ClassNode source)
    • methodDeclaration

      public static String methodDeclaration(com.alibaba.deps.org.objectweb.asm.tree.MethodInsnNode methodInsnNode)
    • methodDeclaration

      public static String methodDeclaration(com.alibaba.deps.org.objectweb.asm.Type owner, com.alibaba.deps.org.objectweb.asm.tree.MethodNode methodNode)
    • findField

      public static com.alibaba.deps.org.objectweb.asm.tree.FieldNode findField(List<com.alibaba.deps.org.objectweb.asm.tree.FieldNode> fields, String name)
    • addField

      public static void addField(com.alibaba.deps.org.objectweb.asm.tree.ClassNode classNode, com.alibaba.deps.org.objectweb.asm.tree.FieldNode fieldNode)
    • addMethod

      public static void addMethod(com.alibaba.deps.org.objectweb.asm.tree.ClassNode classNode, com.alibaba.deps.org.objectweb.asm.tree.MethodNode methodNode)
    • uniqueNameForMethod

      public static String uniqueNameForMethod(String className, String methodName, String desc)
    • getMajorVersion

      public static int getMajorVersion(int version)
      Java ClassFile versions (the minor version is stored in the 16 most significant bits, and the major version in the 16 least significant bits).
      参数:
      version -
      返回:
      另请参阅:
      • Opcodes.V_PREVIEW
    • setMajorVersion

      public static int setMajorVersion(int version, int majorVersion)
      替换掉完整 version里的 major version
      参数:
      version -
      majorVersion -
      返回:
    • className

      public static String className(byte[] classBytes)
    • isEnhancerByCGLIB

      public static boolean isEnhancerByCGLIB(String className)
    • fixConstructorExceptionTable

      public static void fixConstructorExceptionTable(com.alibaba.deps.org.objectweb.asm.tree.MethodNode methodNode)
    • fixMajorVersion

      public static void fixMajorVersion(com.alibaba.deps.org.objectweb.asm.tree.ClassNode classNode)
    • updateMajorVersion

      public static void updateMajorVersion(com.alibaba.deps.org.objectweb.asm.tree.ClassNode from, com.alibaba.deps.org.objectweb.asm.tree.ClassNode to)
      比如两份字节码的 major version,如果 from 的比 to 的要高,则设置 to 的 major version 为 from的 major version
      参数:
      from -
      to -
    • currentJvmMajorVersion

      public static int currentJvmMajorVersion()
      如果成功获取,返回大于 0 的值
      返回:
    • fitCurrentJvmMajorVersion

      public static boolean fitCurrentJvmMajorVersion(com.alibaba.deps.org.objectweb.asm.tree.ClassNode classNode)
      检查当前的字节码版本是否适配
      参数:
      classNode -
      返回:
    • internalClassName

      public static String internalClassName(String className)
    • internalClassName

      public static String internalClassName(Class<?> clazz)