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