public class TransformerManager
extends java.lang.Object
implements java.lang.instrument.ClassFileTransformer
| Constructor and Description |
|---|
TransformerManager(IClassProvider classProvider) |
TransformerManager(IClassProvider classProvider,
AMapper mapper) |
| Modifier and Type | Method and Description |
|---|---|
void |
addBytecodeTransformer(IBytecodeTransformer bytecodeTransformer)
Add a bytecode transformer to the transformer list
Useful when needing to modify bytecode directly without ASM parsing or all Classes at once |
void |
addPostTransformConsumer(IPostTransformer consumer)
Add a post transform consumer to handle the raw byte array after all transformer have been applied
Useful for dumping transformed classes to disk |
void |
addRawTransformer(java.lang.String className,
IRawTransformer rawTransformer)
Add a raw class transformer to the transformer list
Useful when needing direct access to a ClassNode |
void |
addTransformer(org.objectweb.asm.tree.ClassNode classNode)
Add a
ClassNode directly to the transformer listThe class must still be annotated with CTransformer |
void |
addTransformer(java.lang.String transformer)
Add a transformer class to the transformer list
Use the direct class name for a single transformer (e.g. |
java.util.List<java.lang.String> |
getTransformedClasses()
Get a list of all transformed classes
This is useful to redefine already loaded classes |
void |
hookInstrumentation(java.lang.instrument.Instrumentation instrumentation)
Hook an
Instrumentation instance to allow for transformation using itThis can be used to transform classes already loaded by the JVM You have to be careful with re-transforming classes since you can't modify the structure (e.g. |
byte[] |
transform(java.lang.ClassLoader loader,
java.lang.String className,
java.lang.Class<?> classBeingRedefined,
java.security.ProtectionDomain protectionDomain,
byte[] classfileBuffer)
Support method for
InstrumentationYou can simply add the TransformerManager as a ClassFileTransformer using Instrumentation.addTransformer(ClassFileTransformer) or call hookInstrumentation(Instrumentation) |
byte[] |
transform(java.lang.String name,
byte[] bytecode)
Transform the bytecode of a given class
|
public TransformerManager(IClassProvider classProvider)
classProvider - The ClassLoader to use for transformer loadingpublic TransformerManager(IClassProvider classProvider, AMapper mapper)
classProvider - The ClassLoader to use for transformer loadingmapper - The AMapper instancepublic void addBytecodeTransformer(IBytecodeTransformer bytecodeTransformer)
Classes at oncebytecodeTransformer - The IBytecodeTransformer instancepublic void addRawTransformer(java.lang.String className,
IRawTransformer rawTransformer)
ClassNodeclassName - The name of the transformer targetrawTransformer - The IRawTransformer instancepublic void addTransformer(java.lang.String transformer)
transformer - The name of transformer class to addpublic void addTransformer(org.objectweb.asm.tree.ClassNode classNode)
ClassNode directly to the transformer listCTransformerclassNode - The ClassNode to addpublic void addPostTransformConsumer(IPostTransformer consumer)
consumer - The BiConsumer instancepublic byte[] transform(java.lang.String name,
byte[] bytecode)
name - The name of the classbytecode - The bytecode of the classpublic java.util.List<java.lang.String> getTransformedClasses()
public void hookInstrumentation(java.lang.instrument.Instrumentation instrumentation)
throws java.lang.instrument.UnmodifiableClassException
Instrumentation instance to allow for transformation using itinstrumentation - The instance of the Instrumentationjava.lang.instrument.UnmodifiableClassException - If a class could not be redefinedpublic byte[] transform(java.lang.ClassLoader loader,
java.lang.String className,
java.lang.Class<?> classBeingRedefined,
java.security.ProtectionDomain protectionDomain,
byte[] classfileBuffer)
throws java.lang.instrument.IllegalClassFormatException
InstrumentationTransformerManager as a ClassFileTransformer using Instrumentation.addTransformer(ClassFileTransformer) or call hookInstrumentation(Instrumentation)transform in interface java.lang.instrument.ClassFileTransformerjava.lang.instrument.IllegalClassFormatException