如何在Javassist中获取synchronized块对象参数

时间:2012-05-25 07:04:55

标签: javassist

大家, 我想获取synchronized块参数,例如

    String obj;  
    synchronized(obj){
        ... 
    }

如何使用Javassist在字节代码级别获取参数'obj'? 欢迎任何建议。

1 个答案:

答案 0 :(得分:0)

您必须使用Javassist或ASM的低级API来分析字节码指令才能完成您想要的操作。

 Object obj;
 synchronized(obj){
   //...
 }

转换为

 0:   aload_0
 1:   getfield        #2; //Field obj:Ljava/lang/Object;
 4:   dup
 5:   astore_1
 6:   monitorenter
 ...

monitorenter 指令是同步块和astore_1指令的开始,它将obj字段值放在堆栈顶部 - 这就是您要查找的值。