みなさん、同期ブロックのパラメータを取得したいのですが、
String obj;
synchronized(obj){
...
}
Javassistを使用してバイトコードレベルでパラメータ「obj」を取得するにはどうすればよいですか? どんな提案でも大歓迎です。
みなさん、同期ブロックのパラメータを取得したいのですが、
String obj;
synchronized(obj){
...
}
Javassistを使用してバイトコードレベルでパラメータ「obj」を取得するにはどうすればよいですか? どんな提案でも大歓迎です。
必要なことを行うには、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 フィールドの値をスタックの一番上に配置します。これが探している値です。