0

使用しているテストケースで、さまざまなメソッドのオフセットを見つけたいと思います。メソッドの開始位置と終了位置を見つけることができます。オペコードRETURNとARETURNを探します(メソッドvisitInsn()でmethodVisitorを拡張するクラスでこれを行っています)が、これらが発生するオフセットを見つけることができませんでした。バイトコード。何か案は?

念のため: ASMのコアAPIを使用していますが、ツリーAPIが必要なものを見つけるのに役立つことは承知していますが、ツリーAPIを使用するとすべてが遅くなり、メモリを使用するため、それらを購入する余裕がありません。コアAPIを使用しています

4

1 に答える 1

0

命令ごとにオフセットを取得する方法を見つけました。これは一般的な方法ではありませんが、私にとってはうまくいきます。通常は必要ないため、ASM は命令ごとのオフセットを提供しませんが、それでも取得できます。アイデアを機能させるには、ASM 内のクラスを変更する必要がありました。

LabelクラスとClassReaderクラスを修正したのですが、2つ目は、特別な場合にだけラベル配列にラベルを作成して追加する部分があるので、命令ごとにラベルを追加するように指示しただけで、 methodVisitor 内の visitInsn 内の getOffset と、ラベルが解決され、オフセットが設定されます。

于 2012-07-05T19:27:22.563 に答える