gpt4 book ai didi

java - 如何在使用 asm 库进行检测的方法中查找空局部变量

转载 作者:行者123 更新时间:2023-11-30 07:23:59 25 4
gpt4 key购买 nike

在为类的不同方法检测类时为了使方法在文本文件中执行写操作。我首先将字符串存储在显式定义的局部变量 3160 中。如何选择这些变量以防止与已经存在的变量发生冲突。

就像这个片段中的代码一样,每次进入任何方法时都会将类名写入文本文件。为此,必须使用变量 3160(值保持较大,以便已经定义的变量名称不与变量 s(3160)冲突)将字符串 s 加载到堆栈上。我的问题是如何在方法中定义局部变量在使用 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;");

最佳答案

你应该使用 LocalVariablesSorter适配器(从中扩展您自己的访问者,或将其添加到 MethodWriter 之前的访问者链)。然后,当您需要一个新变量时,您可以调用 LocalVariablesSorter.newLocal()分配新变量槽的方法。另见 ASM guide了解更多详情。

关于java - 如何在使用 asm 库进行检测的方法中查找空局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11669461/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com