2

次のコードスニペットを検討してください

synchronized (A.class) {
  foo();
  synchronized (B.class) {
    bar();
  }
}

そして、AとBが交換される別のコード。これはデッドロックを引き起こす可能性があり、ASMを使用してこれを検出しようとしています(特に、A、Bが、同期すべきでないことがわかっているクラスであるかどうかのみを検出します。たとえば、例外)。現在、SimpleVerifierを使用するアナライザーがあります。これを使用して、スタックの最上位にあるBasicValueを取得し、そのTypeを取得できますが、コード例では、内部名はjava / lang / Classになり、どのクラスであるかはわかりません。クラスが表すクラスを見つける簡単な方法を見つけることができないようです。どんな助けでも大歓迎です。ありがとう!

4

1 に答える 1

2

ASM のSourceInterpreterを使用して、値がどこから来たのかを追跡し、値が何であるかを自分で評価する必要があります。

PS: ところで、クラスで同期するのは悪い考えです...

于 2012-06-21T19:32:30.543 に答える