Package jadex.bytecode.vmhacks
Class VmHacks.Unsafe
- java.lang.Object
-
- jadex.bytecode.vmhacks.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 commandvoid
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.
-
-
-
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 classjava.lang.Object
-
init
protected void init()
Initialization step after constructor to allow bootstrapping.
-
runInstrumentationCommand
protected void runInstrumentationCommand(VmHacks.InstrumentationCommand command)
Run an instrumentation command
-
-