0

みなさん、同期ブロックのパラメータを取得したいのですが、

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

Javassistを使用してバイトコードレベルでパラメータ「obj」を取得するにはどうすればよいですか? どんな提案でも大歓迎です。

4

1 に答える 1

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 フィールドの値をスタックの一番上に配置します。これが探している値です。

于 2012-10-20T13:21:54.430 に答える