看板 java 關於我們 聯絡資訊
※ 引述《zanyking (最後的六年級生)》之銘言: : 如標題,先寫一個java.lang.String,copy自原來的String但是把valueOf給換掉: : public static String valueOf(char data[]) { : if (data.length == 3) { : boolean match = true; : .....省略 : } : return new String(data); : } : 接下來,把rt.jar拆包unzip到一個你喜歡的地方,把String生成的class換掉。 : 再來,準備一個資料夾,把JRE的東西都複製一包過去,但rt.jar用新的。 : 最後,請用HotSpot VM,用cmd啟動java時加入這個參數: : java -Xbootclasspath:my_bootclasspath test.Output123 : 簡單的說,把String.valueOf的實做給換掉就好了,偵測到char[]{1,2,3} : 就改吐"123"。 其實不用這麼麻煩,可以這樣 1.下載 http://search.maven.org/remotecontent?filepath=org/javassist/javassist/3.18.0-GA/javassist-3.18.0-GA.jar 然後加到class path 2.在Output123.java目錄下建立 Javassist123.java import javassist.ClassPool; import javassist.CtClass; import javassist.CtMethod; public class Javassist123 { public static void main(String[] args) throws Exception { ClassPool pool = ClassPool.getDefault(); CtClass cc = pool.get("java.lang.String"); CtMethod[] ms = cc.getDeclaredMethods(); for (CtMethod m : ms) { if ("valueOf".equals(m.getName()) && "([C)Ljava/lang/String;".equals(m.getSignature())) { m.setBody("{return \"123\";}"); break; } } cc.writeFile("."); } } 3.執行 javac Javassist123.java && java Javassist123 4.再執行 java -Xbootclasspath/p:. Output123 就會輸出123了 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 223.140.144.134