ASM Byte Code を使用してメソッドのパラメータ値またはオブジェクトを表示またはアクセスする方法は?
質問する
2530 次
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_0
4 番目以降の引数については、aload 4
etcと言うでしょう。
インスタンス メソッドの最初の引数は への参照であることに注意してくださいthis
。したがって、最初の引数はローカル #1 になり、次のようになりますaload_1
。
ただし、ASM のものを使用してバイトコードを生成します...そうしてください。MethodVisitorはmv.visitVarInsn(ALOAD, 0);
where mv
is your MethodVisitor. は0
、ローカル変数インデックスに置き換えられます。
于 2013-02-15T04:52:53.453 に答える