1

ASM Byte Code を使用してメソッドのパラメータ値またはオブジェクトを表示またはアクセスする方法は?

4

2 に答える 2

1

メソッドのパラメーターの型を考慮すると、次のようなことができます。

int off = (access | Opcodes.ACC_STATIC) == 0 ? 0 : 1;
int opcode = Type.getArgumentTypes(desc)[param + off].getOpcode(Opcodes.IALOAD);
mv.visitVarIns(opcode, param);
...

ここで、paramはメソッド パラメータ番号で、accessとはClassVisitor.html#visitMethoddescの対応するパラメータから取得する値です。

于 2013-02-26T03:39:28.703 に答える
1

メソッドの引数は、最初のいくつかのローカル変数です。最初の引数にアクセスするためのバイトコード ニーモニックは、引数の型に応じて、aload_0またはiload_0またはなどのようになります。lload_04 番目以降の引数については、aload 4etcと言うでしょう。

インスタンス メソッドの最初の引数は への参照であることに注意してくださいthis。したがって、最初の引数はローカル #1 になり、次のようになりますaload_1

ただし、ASM のものを使用してバイトコードを生成します...そうしてください。MethodVisitorはmv.visitVarInsn(ALOAD, 0);where mvis your MethodVisitor. は0、ローカル変数インデックスに置き換えられます。

于 2013-02-15T04:52:53.453 に答える