嗨,我試圖攔截sun.security.ssl.ServerHandshaker
的負載並添加字節代碼以打印幾個私有字段。Javassist報告字段在構造函數初始化後爲空
這裏是我試圖添加代碼:
public static final String printCLIENT_RANDOM_CODE =
"System.out.println(\"this.clnt_random:\"+this.clnt_random);\n"
+ "System.out.println(\"this.session:\"+this.session);";
這裏是做增強功能。 classfileBuffer
是原始字節碼,className
是類名,並insertAfterJavaCode
將上述printCLIENT_RANDOM_CODE
private byte[] instrument(byte[] classfileBuffer, String className, String insertAfterJavaCode) throws Exception {
System.out.println("Attempting to enhance " + className + "...");
ClassPool cp = ClassPool.getDefault();
cp.insertClassPath(new ByteArrayClassPath(className, classfileBuffer));
CtClass cc = cp.get(className);
CtConstructor[] declaredConstructors = cc.getDeclaredConstructors();
for (CtConstructor con : declaredConstructors) {
con.insertAfter(insertAfterJavaCode);
}
return cc.toBytecode();
}
當它運行時,但是,我得到這個:
Attempting to enhance sun.security.ssl.ServerHandshaker...
this.clnt_random:null
this.session:null
這是爲什麼?如果你看source code這些字段應該在構造函數的末尾進行初始化。是什麼賦予了?
你確定他們正在初始化?它們不會在您鏈接的源代碼中的任何位置初始化。 – Antimony