Class VmHacks.Unsafe

java.lang.Object
jadex.bytecode.vmhacks.VmHacks.Unsafe
Enclosing class:
VmHacks

public static final class VmHacks.Unsafe extends Object
Access to unsafe operations.
  • Field Details

    • TEMP_JAR_DIR

      protected static final File TEMP_JAR_DIR
      Directory for temporary jar files.
  • Method Details

    • 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.
    • getNativeHelper

      public jadex.nativetools.NativeHelper getNativeHelper()
      Returns functionality unlocked through native interface.
      Returns:
      The native helper, may return null if unavailable.
    • 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(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.
    • defineClass

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

      public Class<?> redefineClassIndirect(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(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(String classname, byte[] classcontent)
      Appends a new class to the bootstrap classloader.
      Parameters:
      classname - The class name.
      classcontent - The bytecode.
    • appendToBootstrapClassLoaderSearch

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

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

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

      protected void runInstrumentationCommand(VmHacks.InstrumentationCommand command)
      Run an instrumentation command