Class VmHacks.Unsafe

  • Enclosing class:
    VmHacks

    public static final class VmHacks.Unsafe
    extends java.lang.Object
    Access to unsafe operations.
    • Field Summary

      Fields 
      Modifier and Type Field Description
      protected static java.io.File TEMP_JAR_DIR
      Directory for temporary jar files.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void appendToBootstrapClassLoaderSearch​(java.lang.String classname, byte[] classcontent)
      Appends a new class to the bootstrap classloader.
      void appendToBootstrapClassLoaderSearch​(java.lang.String classname, java.io.InputStream classcontent)
      Appends a new class to the bootstrap classloader.
      java.lang.Class<?> defineClass​(java.lang.String name, byte[] b, int off, int len, java.lang.ClassLoader loader, java.security.ProtectionDomain pd)
      Access to sun.misc.Unsafe or equivalent.
      boolean hasAsm()
      Tests if ASM is available.
      boolean hasIndirectRedefinition()
      Checks if redefineClassIndirect() is available.
      boolean hasInstrumentation()
      Checks if instrumentation is available.
      boolean hasNative()
      Tests if native access is available.
      protected void init()
      Initialization step after constructor to allow bootstrapping.
      void redefineClass​(java.lang.Class<?> clazz, byte[] bytecode)
      Redefine class byte code.
      java.lang.Class<?> redefineClassIndirect​(java.lang.Class<?> clazz, byte[] bytecode)
      Redefine class byte code.
      protected void runInstrumentationCommand​(VmHacks.InstrumentationCommand command)
      Run an instrumentation command
      void setAccessible​(java.lang.reflect.AccessibleObject accobj, boolean flag)
      Sets reflective object accessible without checks if native support is available.
      java.lang.String toString()
      Debug message.
      boolean tryChangeUser​(java.lang.String username)
      Attempts to change the user of the process to the given name.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Field Detail

      • TEMP_JAR_DIR

        protected static final java.io.File TEMP_JAR_DIR
        Directory for temporary jar files.
    • Method Detail

      • hasAsm

        public boolean hasAsm()
        Tests if ASM is available.
        Returns:
        True, if ASM is available.
      • hasNative

        public boolean hasNative()
        Tests if native access is available.
        Returns:
        True, if native access is available.
      • hasInstrumentation

        public boolean hasInstrumentation()
        Checks if instrumentation is available.
        Returns:
        True, if instrumentation is available.
      • hasIndirectRedefinition

        public boolean hasIndirectRedefinition()
        Checks if redefineClassIndirect() is available.
        Returns:
        True, if indirect redefinition is available.
      • tryChangeUser

        public boolean tryChangeUser​(java.lang.String username)
        Attempts to change the user of the process to the given name. If set to null, a list of default user accounts is tried.
        Parameters:
        username - The target user name, set to null for a list of default user account.
        Returns:
        True, if successful, false if the attempt probably failed.
      • setAccessible

        public void setAccessible​(java.lang.reflect.AccessibleObject accobj,
                                  boolean flag)
        Sets reflective object accessible without checks if native support is available.
        Parameters:
        accobj - The accessible object.
        flag - The flag value.
      • defineClass

        public java.lang.Class<?> defineClass​(java.lang.String name,
                                              byte[] b,
                                              int off,
                                              int len,
                                              java.lang.ClassLoader loader,
                                              java.security.ProtectionDomain pd)
        Access to sun.misc.Unsafe or equivalent.
      • redefineClassIndirect

        public java.lang.Class<?> redefineClassIndirect​(java.lang.Class<?> clazz,
                                                        byte[] bytecode)
        Redefine class byte code. Check HAS_INSTRUMENTATION before use. Uses indirect route via classloader enhancement, more likely to work.
        Parameters:
        clazz - Class to be redefined.
        bytecode - The new byte code.
        Returns:
        Redefined class.
      • redefineClass

        public void redefineClass​(java.lang.Class<?> clazz,
                                  byte[] bytecode)
        Redefine class byte code. Check HAS_INSTRUMENTATION before use.
        Parameters:
        clazz - Class to be redefined.
        bytecode - The new byte code.
      • appendToBootstrapClassLoaderSearch

        public void appendToBootstrapClassLoaderSearch​(java.lang.String classname,
                                                       byte[] classcontent)
        Appends a new class to the bootstrap classloader.
        Parameters:
        classname - The class name.
        classcontent - The bytecode.
      • appendToBootstrapClassLoaderSearch

        public void appendToBootstrapClassLoaderSearch​(java.lang.String classname,
                                                       java.io.InputStream classcontent)
        Appends a new class to the bootstrap classloader.
        Parameters:
        classname - The class name.
        classcontent - The bytecode.
      • toString

        public java.lang.String toString()
        Debug message.
        Overrides:
        toString in class java.lang.Object
      • init

        protected void init()
        Initialization step after constructor to allow bootstrapping.