Skip to content

Instantly share code, notes, and snippets.

View heipacker's full-sized avatar

heipacker heipacker

View GitHub Profile
package com.dlmu.agent.test;
/**
* Created by fupan on 16-4-2.
*/
public class HelloWorld {
public static void main(String[] args) {
System.out.println("hello, world.");
}
hey,hey,hey
package com.dlmu.agent;
import java.lang.instrument.Instrumentation;
/**
* Created by fupan on 16-4-2.
*/
public class AgentTest {
private static Instrumentation inst = null;
private static Instrumentation instrumentation() {
ClassLoader mainAppLoader = ClassLoader.getSystemClassLoader();
try {
Class<?> javaAgentClass = mainAppLoader.loadClass("com.dlmu.agent.AgentTest");
Method method = javaAgentClass.getDeclaredMethod("instrumentation", new Class[0]);
return (Instrumentation) method.invoke(null, new Object[0]);
} catch (Throwable e) {
System.out.println("can not get agent class" + e.getStackTrace());
return null;
}
private static void addCode(Instrumentation instrumentation) {
Class[] allLoadedClasses = instrumentation.getAllLoadedClasses();
System.out.println("all load classes length:" + allLoadedClasses.length);
System.out.println("object size:" + instrumentation.getObjectSize(new Object()));
instrumentation.addTransformer(new ClassFileTransformer() {
@Override
public byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException {
if (classBeingRedefined != null) return null;
System.out.println("class transform " + className);
return classfileBuffer;
private String jarFilePath = "/home/fupan/IdeaProjects/agentTest/agent-jar/target/agent-jar-1.0-SNAPSHOT.jar";
private static void attachAgent() {
TestAgent testAgent = new TestAgent();
testAgent.loadAgent();
}
void loadAgent() {
VirtualMachine vm;
/**
* Registers the supplied transformer.
* <P>
* Same as <code>addTransformer(transformer, false)</code>.
*
* @param transformer the transformer to register
* @throws java.lang.NullPointerException if passed a <code>null</code> transformer
* @see #addTransformer(ClassFileTransformer,boolean)
*/
void
@heipacker
heipacker / gist:dc219bff58e614a091cf0f989fe28d65
Created April 9, 2016 13:05
SimpleClassFileTransformer
package com.dlmu.agent.server;
import java.lang.instrument.ClassFileTransformer;
import java.lang.instrument.IllegalClassFormatException;
import java.security.ProtectionDomain;
/**
* Created by fupan on 16-4-9.
*/
public class SimpleClassFileTransformer implements ClassFileTransformer {
@heipacker
heipacker / gist:1cf23e119f625924675f08a61c2d8ff3
Created April 9, 2016 13:15
byteBuddyClassFileTransformer
package com.dlmu.agent.server;
import net.bytebuddy.agent.builder.AgentBuilder;
import net.bytebuddy.description.type.TypeDescription;
import net.bytebuddy.dynamic.DynamicType;
import net.bytebuddy.implementation.MethodDelegation;
import net.bytebuddy.implementation.SuperMethodCall;
import net.bytebuddy.matcher.ElementMatchers;
import java.lang.instrument.ClassFileTransformer;
package com.dlmu.agent.server;
import net.bytebuddy.implementation.bind.annotation.Origin;
import java.lang.reflect.Method;
/**
* Created by fupan on 16-4-9.
*/
public class DelagateLogging {