1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| package org.javaSecBase.myClassLoader;
import java.io.IOException; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.nio.file.Files; import java.nio.file.Paths;
public class Run { public void run1(){ UserClassLoader userClassLoader = new UserClassLoader("/Users/august/code/java/JavaSecLearn/src/main/java/org/javaSecBase/myClassLoader/User.class"); try { Class<?> clazz = userClassLoader.loadClass("org.javaSecBase.myClassLoader.User");
Constructor<?> userConstructor = clazz.getConstructor(String.class); Object user = userConstructor.newInstance("august"); Method sayMethod = clazz.getDeclaredMethod("say", String.class); sayMethod.setAccessible(true); sayMethod.invoke(user, "august");
Field nameField = clazz.getDeclaredField("name"); nameField.setAccessible(true); nameField.set(user, "august2");
Method publicSayMethod = clazz.getMethod("say"); publicSayMethod.invoke(user);
} catch (ClassNotFoundException e) { e.printStackTrace(); } catch (NoSuchMethodException | InvocationTargetException | InstantiationException | IllegalAccessException | NoSuchFieldException e) { throw new RuntimeException(e); }
}
public void run2() throws NoSuchMethodException, IOException, InvocationTargetException, IllegalAccessException, InstantiationException, NoSuchFieldException { ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
Method defineClassMethod = ClassLoader.class.getDeclaredMethod("defineClass", String.class,byte[].class, int.class, int.class); defineClassMethod.setAccessible(true);
byte[] bytes = Files.readAllBytes(Paths.get("/Users/august/code/java/learn/src/main/java/Test.class"));
Class userClass = (Class) defineClassMethod.invoke(systemClassLoader, "Test", bytes, 0, bytes.length);
Object userConstructor = userClass.newInstance();
} public static void main(String[] args) throws ClassNotFoundException, IOException, NoSuchFieldException, InvocationTargetException, NoSuchMethodException, IllegalAccessException, InstantiationException { Run run = new Run(); run.run2(); } }
|