さまざまなメソッドのクラスをインストルメント化するときに、メソッドにテキスト ファイルへの書き込み操作を実行させるため。最初に、明示的に定義されたローカル変数 3160 に文字列を格納しました。既存の変数との競合を防ぐためにこれらの変数を選択する方法。
このスニペットのように、コードはメソッドに入るたびにクラス名をテキスト ファイルに書き込む作業を行います。そのためには、変数 3160 を使用して文字列 s をスタックにロードする必要がありました (既に定義されている変数名が変数 s (3160) と競合しないように、値は大きく保たれます。私の質問は、メソッドでローカル変数を定義する方法です。 ASM ライブラリを使用したインストルメンテーション中 この質問は時期尚早に思えるかもしれませんが、それは私が初心者だからです。
String s= className;
mv.visitLdcInsn(s);
mv.visitVarInsn(Opcodes.ASTORE, 3160);
mv.visitTypeInsn(Opcodes.NEW, "java/lang/StringBuilder");
mv.visitInsn(Opcodes.DUP);
mv.visitVarInsn(Opcodes.ALOAD, 3160);
mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/String", "valueOf", "(Ljava/lang/Object;)Ljava/lang/String;");
mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/lang/StringBuilder", "<init>", "(Ljava/lang/String;)V");
mv.visitMethodInsn(Opcodes.INVOKESTATIC, "com/me/database/dataCollectionFile/Info", "callMeAnyTime", "()Ljava/lang/String;");
mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/StringBuilder", "append", "(Ljava/lang/String;)Ljava/lang/StringBuilder;");
mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/StringBuilder", "toString", "()Ljava/lang/String;");