Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.agent.instrumentation;
- import java.lang.instrument.ClassFileTransformer;
- import java.lang.instrument.IllegalClassFormatException;
- import java.lang.instrument.Instrumentation;
- import java.security.ProtectionDomain;
- import org.apache.bcel.classfile.*;
- public class SimpleInstrumentation implements ClassFileTransformer {
- /** This is where the counts will be printed to **/
- @SuppressWarnings("unused")
- private static java.io.PrintStream output = System.err;
- public static void premain(String options, Instrumentation ins) {
- if (options != null)
- try {
- SimpleInstrumentation.output = new java.io.PrintStream(new java.io.FileOutputStream(options));
- }
- catch (java.io.FileNotFoundException e) {
- System.err.println(options + " - file not found");
- }
- ins.addTransformer(new SimpleInstrumentation());
- Class<?> classes[] = ins.getAllLoadedClasses();
- System.out.println("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$");
- for (Class<?> c : classes)
- if (!c.getName().startsWith("java") && !c.getName().startsWith("sun") && !c.getName().startsWith("[Ljava"))
- System.out.println("CLASS LOADED: " + c.toString());
- System.out.println("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$");
- }
- public byte[] transform(ClassLoader loader, String className, Class<?> cBR, ProtectionDomain pD, byte[] classfileBuffer) throws IllegalClassFormatException {
- if (isSystemClass(className))
- return null;
- try {
- ClassParser cp = new ClassParser(new java.io.ByteArrayInputStream(classfileBuffer), className + ".java");
- JavaClass jc = cp.parse();
- Method methods[] = jc.getMethods();
- Field fields[] = jc.getFields();
- /*
- * Get all methods from the className
- */
- System.out.println("CLASS " + className + " has MATHODS:");
- for (Method m : methods)
- System.out.println("\t" + m.toString());
- /*
- * Get all attributes from the className
- */
- System.out.println("CLASS " + className + " has FIELDS:");
- for (Field f : fields)
- System.out.println("\t" + f.toString() + " ===> Current Value: " + f.getConstantValue());
- System.out.println("################################\n################################");
- }
- catch (Throwable exc) {
- System.err.println(exc);
- }
- return null;
- }
- /** Return true if this is a class we don't want to instrument **/
- private boolean isSystemClass(String className) {
- return ((className.startsWith("java/")) || (className.startsWith("javax/")) || (className.startsWith("sun/")));
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement