When JVM loads, runtime classes are available for use and can't be patched.
Manipulating system properties (namely java.class.path) is futile.
In %JAVA_PATH%\lib there's a runtime JAR and its source-code.
In order to add a method to System.out, the class we need to alter is PrintStream.
patch/ java.base/java/io/PrintStream.java build/java/io/PrintStream.class build/Hello.classHello.java javac --patch-module java.base=./java.base ./java.base/java/io/PrintStream.java -d ./build
javac --patch-module java.base=build Hello.java
java --patch-module java.base=build -cp build Hello
import java.io.PrintStream;
public abstract class Hello
{
public static void main(String[] args)
{ PrintStream s = System.out; s.println("Code " + s.specialMethod()); } }
Resources
Jigsaw (OpenJDK)
No comments:
Post a Comment