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 
 - 
 
 -