| Refresh | Home EGTry.com

run-time bytecode instrumentation


implements a ClassFileTransformer

package instrument;

import java.lang.instrument.ClassFileTransformer;
import java.lang.instrument.IllegalClassFormatException;
import java.security.ProtectionDomain;

public class MyClassFileTransformer implements ClassFileTransformer {


	public byte[] transform(ClassLoader loader, String className,
			Class<?> classBeingRedefined, ProtectionDomain protectionDomain,
			byte[] classfileBuffer) throws IllegalClassFormatException {
		System.out.println("load class: "+className);
		return classfileBuffer;
	}

}


create an agent to load up the ClassFileTransformer

package instrument;

import java.lang.instrument.Instrumentation;

public class AgentMain {

	public static void premain(String agenArgments, Instrumentation instrument) {
		instrument.addTransformer(new MyClassFileTransformer());
	}
}


create MANIFEST.MF

Manifest-Version: 1.0
Premain-Class: instrument.AgentMain



package

>java -cMvf myagent.jar META-INF instrument
>java -tf myagent.jar
META-INF/
META-INF/MANIFEST.MF
instrument/
instrument/AgentMain.class
instrument/MyClassFileTransformer.class


use

java -javaagent:myagent.jar entry_classname