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.ObjectAccess to unsafe operations.
-
-
Field Summary
Fields Modifier and Type Field Description protected static java.io.FileTEMP_JAR_DIRDirectory for temporary jar files.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidappendToBootstrapClassLoaderSearch(java.lang.String classname, byte[] classcontent)Appends a new class to the bootstrap classloader.voidappendToBootstrapClassLoaderSearch(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.jadex.nativetools.NativeHelpergetNativeHelper()Returns functionality unlocked through native interface.booleanhasAsm()Tests if ASM is available.booleanhasIndirectRedefinition()Checks if redefineClassIndirect() is available.booleanhasInstrumentation()Checks if instrumentation is available.booleanhasNative()Tests if native access is available.protected voidinit()Initialization step after constructor to allow bootstrapping.voidredefineClass(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 voidrunInstrumentationCommand(VmHacks.InstrumentationCommand command)Run an instrumentation commandjava.lang.StringtoString()Debug message.booleantryChangeUser(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.
-
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(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.
-
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:
toStringin 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
-
-