嗨,我试图拦截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