(String agentArg, Instrumentation inst)
| 122 | } |
| 123 | |
| 124 | public static void agentmain(String agentArg, Instrumentation inst){ |
| 125 | outFile = agentArg; |
| 126 | Class[] classes = inst.getAllLoadedClasses(); |
| 127 | for (int i = 0; i < classes.length; i++) { |
| 128 | Class clazz = classes[i]; |
| 129 | try { |
| 130 | if (Driver.class.isAssignableFrom(clazz)){ |
| 131 | ClassPool classPool = new ClassPool(true); |
| 132 | classPool.insertClassPath(new ClassClassPath(clazz)); |
| 133 | classPool.insertClassPath(new LoaderClassPath(clazz.getClassLoader())); |
| 134 | CtClass ctClass = classPool.get(clazz.getName()); |
| 135 | CtMethod ctMethod = ctClass.getMethod("connect","(Ljava/lang/String;Ljava/util/Properties;)Ljava/sql/Connection;"); |
| 136 | ctMethod.insertBefore(String.format(" try {\n" + |
| 137 | " java.lang.Class.forName(\"%s\",true,java.lang.ClassLoader.getSystemClassLoader()).getMethod(\"add\", new java.lang.Class[]{java.lang.String.class, java.util.Properties.class}).invoke(null,new java.lang.Object[]{$1,$2});\n" + |
| 138 | " }catch (java.lang.Throwable e){\n" + |
| 139 | " \n" + |
| 140 | " }",Main.class.getName())); |
| 141 | inst.redefineClasses(new ClassDefinition(clazz,ctClass.toBytecode())); |
| 142 | ctClass.detach(); |
| 143 | } |
| 144 | }catch (Throwable e){ |
| 145 | // e.printStackTrace(); |
| 146 | } |
| 147 | } |
| 148 | } |
| 149 | private static boolean eq(String url,String properties) throws Throwable{ |
| 150 | if (dbConnMap.containsKey(url)) { |
| 151 | String valueProperties=(String) dbConnMap.get(url); |
nothing calls this directly
no outgoing calls
no test coverage detected