private static void intro() { try { System.setProperty("scouter.enabled", "true"); Logo.print(false); String nativeName = JavaAgent.class.getName().replace('.', '/') + ".class"; ClassLoader cl = JavaAgent.class.getClassLoader(); if (cl == null) { Logger.println("loaded by system classloader "); Logger.println(cut("" + ClassLoader.getSystemClassLoader().getResource(nativeName))); } else { Logger.println("loaded by app classloader "); Logger.println(cut("" + cl.getResource(nativeName))); } } catch (Throwable t) { } }
private Class getClass(String className) { Class[] loadedClasses = JavaAgent.getInstrumentation().getAllLoadedClasses(); for (Class c : loadedClasses) { if (c.getName().equals(className)) { return c; } } return null; } @RequestHandler(RequestCmd.OBJECT_CHECK_RESOURCE_FILE)
public static ClassLoader appendToSystemOrBootLoader(String key) { if (JavaAgent.isJava9plus()) { appendToSystemLoader(JavaAgent.getInstrumentation(), key); return ClassLoader.getSystemClassLoader(); } else { appendToBootLoader(JavaAgent.getInstrumentation(), key); return null; } }
public static void preStart(String options, Instrumentation instrum, ClassFileTransformer transformer) { if (JavaAgent.instrumentation != null) { return; } intro(); Configure conf = Configure.getInstance(); if(conf.hook_lambda_instrumentation_strategy_enabled) { Logger.println("LD001", "hook_lambda_instrumentation_strategy_enabled = true!"); Logger.println("LD001", "This feature is very experimental !!\n test it in your test environment first !!"); try { new AgentBuilder.Default() .with(AgentBuilder.LambdaInstrumentationStrategy.ENABLED) .installOn(instrum); } catch (Throwable t) { Logger.println("LD002", "scouter min version doesn't support this feature !!!"); Logger.println("LD002", "Fail to hook_lambda_instrumentation_strategy_enabled !"); Logger.println("LD003", "Fatal on load bytebuddy AgentBuilder", t); } } BackJobs.getInstance().put(Logger.class.getName(), 3000, Logger.initializer); JavaAgent.instrumentation = instrum; JavaAgent.instrumentation.addTransformer(transformer); //TODO suuport 1.5 ? //JavaAgent.instrumentation.addTransformer(transformer, true); // RequestAgent.getInstance(); addAsyncRedefineClasses(); TcpRequestMgr.getInstance(); AsyncRunner.getInstance().add(new AgentBoot()); }
public static void premain(String options, Instrumentation instrum) { preStart(options, instrum, new AgentTransformer()); }
public synchronized static ClassLoader getToolsLoader() { if (toolsLoader == null) { try { if (JavaAgent.isJava9plus()) { toolsLoader = ClassLoader.getSystemClassLoader(); } else { File tools = ManifestUtil.getToolsFile(); toolsLoader = new URLClassLoader(new URL[] { tools.toURI().toURL() }); } } catch (Throwable e) { Logger.println("A134", e); } } return createLoader(toolsLoader, "scouter.tools"); }
public static void preStart(String options, Instrumentation instrum, ClassFileTransformer transformer) { if (JavaAgent.instrumentation != null) { return; } intro(); Configure conf = Configure.getInstance(); if(conf.hook_lambda_instrumentation_strategy_enabled) { Logger.println("LD001", "hook_lambda_instrumentation_strategy_enabled = true!"); Logger.println("LD001", "This feature is very experimental !!\n test it in your test environment first !!"); try { new AgentBuilder.Default() .with(AgentBuilder.LambdaInstrumentationStrategy.ENABLED) .installOn(instrum); } catch (Throwable t) { Logger.println("LD002", "scouter min version doesn't support this feature !!!"); Logger.println("LD002", "Fail to hook_lambda_instrumentation_strategy_enabled !"); Logger.println("LD003", "Fatal on load bytebuddy AgentBuilder", t); } } BackJobs.getInstance().put(Logger.class.getName(), 3000, Logger.initializer); JavaAgent.instrumentation = instrum; JavaAgent.instrumentation.addTransformer(transformer); //TODO suuport 1.5 ? //JavaAgent.instrumentation.addTransformer(transformer, true); // RequestAgent.getInstance(); addAsyncRedefineClasses(); TcpRequestMgr.getInstance(); AsyncRunner.getInstance().add(new AgentBoot()); }
public static void premain(String options, Instrumentation instrum) { preStart(options, instrum, new AgentTransformer()); }
public synchronized static ClassLoader getToolsLoader() { if (toolsLoader == null) { try { if (JavaAgent.isJava9plus()) { toolsLoader = ClassLoader.getSystemClassLoader(); } else { File tools = ManifestUtil.getToolsFile(); toolsLoader = new URLClassLoader(new URL[] { tools.toURI().toURL() }); } } catch (Throwable e) { Logger.println("A134", e); } } return createLoader(toolsLoader, "scouter.tools"); }
private Class getClass(String className) { Class[] loadedClasses = JavaAgent.getInstrumentation().getAllLoadedClasses(); for (Class c : loadedClasses) { if (c.getName().equals(className)) { return c; } } return null; } @RequestHandler(RequestCmd.OBJECT_CHECK_RESOURCE_FILE)
public static ClassLoader appendToSystemOrBootLoader(String key) { if (JavaAgent.isJava9plus()) { appendToSystemLoader(JavaAgent.getInstrumentation(), key); return ClassLoader.getSystemClassLoader(); } else { appendToBootLoader(JavaAgent.getInstrumentation(), key); return null; } }
public static void preStart(String options, Instrumentation instrum, ClassFileTransformer transformer) { if (JavaAgent.instrumentation != null) { return; } intro(); Configure conf = Configure.getInstance(); if(conf.hook_lambda_instrumentation_strategy_enabled) { Logger.println("LD001", "hook_lambda_instrumentation_strategy_enabled = true!"); Logger.println("LD001", "This feature is very experimental !!\n test it in your test environment first !!"); try { new AgentBuilder.Default() .with(AgentBuilder.LambdaInstrumentationStrategy.ENABLED) .installOn(instrum); } catch (Throwable t) { Logger.println("LD002", "scouter min version doesn't support this feature !!!"); Logger.println("LD002", "Fail to hook_lambda_instrumentation_strategy_enabled !"); Logger.println("LD003", "Fatal on load bytebuddy AgentBuilder", t); } } BackJobs.getInstance().put(Logger.class.getName(), 3000, Logger.initializer); JavaAgent.instrumentation = instrum; JavaAgent.instrumentation.addTransformer(transformer); //TODO suuport 1.5 ? //JavaAgent.instrumentation.addTransformer(transformer, true); // RequestAgent.getInstance(); addAsyncRedefineClasses(); TcpRequestMgr.getInstance(); AsyncRunner.getInstance().add(new AgentBoot()); }
public static void premain(String options, Instrumentation instrum) { preStart(options, instrum, new AgentTransformer()); }
public synchronized static ClassLoader getToolsLoader() { if (toolsLoader == null) { try { if (JavaAgent.isJava9plus()) { toolsLoader = ClassLoader.getSystemClassLoader(); } else { File tools = ManifestUtil.getToolsFile(); toolsLoader = new URLClassLoader(new URL[] { tools.toURI().toURL() }); } } catch (Throwable e) { Logger.println("A134", e); } } return createLoader(toolsLoader, "scouter.tools"); }
private static void intro() { try { System.setProperty("scouter.enabled", "true"); Logo.print(false); String nativeName = JavaAgent.class.getName().replace('.', '/') + ".class"; ClassLoader cl = JavaAgent.class.getClassLoader(); if (cl == null) { Logger.println("loaded by system classloader "); Logger.println(cut("" + ClassLoader.getSystemClassLoader().getResource(nativeName))); } else { Logger.println("loaded by app classloader "); Logger.println(cut("" + cl.getResource(nativeName))); } } catch (Throwable t) { } }
public static Object invokeStaticMethod(String className, String methodName) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, IllegalAccessException { Integer tryCount = tryCountMap.get(className); if (tryCount != null && tryCount.intValue() > 20) return null; Method m = (Method) reflCache.get(className); if (m == null) { Class[] loadedClasses = JavaAgent.getInstrumentation().getAllLoadedClasses(); for (Class c : loadedClasses) { if (c.getName().equals(className)) { m = c.getMethod(methodName); reflCache.put(className, m); tryCountMap.remove(className); break; } } } if (m == null) { tryCountMap.put(className, new Integer(tryCount.intValue() + 1)); return null; } return m.invoke(null, new Object[]{}); }
public static ClassLoader appendToSystemOrBootLoader(String key) { if (JavaAgent.isJava9plus()) { appendToSystemLoader(JavaAgent.getInstrumentation(), key); return ClassLoader.getSystemClassLoader(); } else { appendToBootLoader(JavaAgent.getInstrumentation(), key); return null; } }
private static void intro() { try { System.setProperty("scouter.enabled", "true"); Logo.print(false); String nativeName = JavaAgent.class.getName().replace('.', '/') + ".class"; ClassLoader cl = JavaAgent.class.getClassLoader(); if (cl == null) { Logger.println("loaded by system classloader "); Logger.println(cut("" + ClassLoader.getSystemClassLoader().getResource(nativeName))); } else { Logger.println("loaded by app classloader "); Logger.println(cut("" + cl.getResource(nativeName))); } } catch (Throwable t) { } }
public static Object invokeStaticMethod(String className, String methodName) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, IllegalAccessException { Integer tryCount = tryCountMap.get(className); if (tryCount != null && tryCount.intValue() > 20) return null; Method m = (Method) reflCache.get(className); if (m == null) { Class[] loadedClasses = JavaAgent.getInstrumentation().getAllLoadedClasses(); for (Class c : loadedClasses) { if (c.getName().equals(className)) { m = c.getMethod(methodName); reflCache.put(className, m); tryCountMap.remove(className); break; } } } if (m == null) { tryCountMap.put(className, new Integer(tryCount.intValue() + 1)); return null; } return m.invoke(null, new Object[]{}); }
private void hooking(Hook m) { // Never use dynamic hooking on AIX with JDK1.5 if (SystemUtil.IS_AIX && SystemUtil.IS_JAVA_1_5) { return; } try { Class cls = Class.forName(m.classname, false, m.loader); ClassDefinition[] cd = new ClassDefinition[1]; cd[0] = new ClassDefinition(cls, m.body); JavaAgent.getInstrumentation().redefineClasses(cd); } catch (Throwable t) { Logger.println("A149", "async hook fail:" + m.classname + " " + t); } } }