访问ASM Java库中的局部变量

基兰

我正在尝试在插入方法时调用局部变量。到目前为止,我能够在Node中获取局部变量,但实际上无法访问任何内容。

这是我的插入内容(非常草率,我已经有一段时间了,一段时间前设计不再是我的主要任务):

        final ClassReader reader = new ClassReader("revel/reflection/test/SomeClass");
    final ClassNode classNode = new ClassNode();
    reader.accept(classNode, 0);
    for(final MethodNode mn : (List<MethodNode>)classNode.methods) {
        if(mn.name.equalsIgnoreCase("testLocals")) {
            final InsnList list = new InsnList();

            for(final LocalVariableNode local : (List<LocalVariableNode>)mn.localVariables) {
                System.out.println("Local Variable: " + local.name + " : " + local.desc + " : " + local.signature + " : " + local.index);
                if(local.desc.contains("String")) {
                    mn.visitVarInsn(Opcodes.ALOAD, local.index);
                    final VarInsnNode node = new VarInsnNode(Opcodes.ALOAD, 1);

                    list.add(node);
                    System.out.println("added local var '" + local.name + "'");
                }
            }

            final MethodInsnNode insertion = new MethodInsnNode(Opcodes.INVOKESTATIC, "revel/reflection/test/Test", "printLocalString", "(Ljava/lang/String;)V");
            list.add(insertion);
            mn.instructions.insert(list);
        }
    }

    ClassWriter writer = new ClassWriter(0);
    classNode.accept(writer);

    loadClass(writer.toByteArray(), "revel.reflection.test.SomeClass");
    SomeClass.testLocals(true);

尝试进入的方法:

    public static void testLocals(boolean one) {
    String two = "hello local variables";
    one = true;
    int three = 64;
}

它产生:

Local Variable: one : Z : null : 0
Local Variable: two : Ljava/lang/String; : null : 1
added local var 'two'
Local Variable: three : I : null : 2
Exception in thread "main" java.lang.VerifyError: Bad local variable type
Exception Details:
  Location:
    revel/reflection/test/SomeClass.testLocals(Z)V @0: aload_1
  Reason:
    Type top (current frame, locals[1]) is not assignable to reference type
  Current Frame:
    bci: @0
    flags: { }
    locals: { integer }
    stack: { }
  Bytecode:
    0000000: 2bb8 0040 1242 4c04 3b10 403d b12b     

        at revel.reflection.test.Test.main(Test.java:66)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at                         sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)

第66行是SomeClass.testLocals(true); 任何人都可以阐明情况吗?

神经nau

看来您的问题出在mn.instructions.insert(list);行上该行将新指令插入到该方法的所有指令列表的开头testLocals换句话说,您已经two在声明或分配值之前使用了变量尝试使用mn.instructions.add(list);并查看是否能解决问题。

祝你好运!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Java ASM - 如何在方法中创建局部变量

来自分类Java

在内部类中访问局部变量(java)

来自分类Dev

如何使局部变量在Java中的循环外可访问

来自分类Java

如何通过将局部变量存储到Java Android中的类变量(全局)来访问局部变量

来自分类Dev

在 *ngIf 中访问局部变量

来自分类Dev

在C中访问bash局部变量

来自分类Dev

无法在for,php中访问局部变量

来自分类Java

访问最终局部变量是否比Java中的类变量更快?

来自分类Dev

在 Android Java/Kotlin 中,实现接口是否可以直接访问嵌套类的局部变量

来自分类Dev

局部变量与方法访问

来自分类Dev

Java在封闭范围内访问局部变量

来自分类Dev

在回调函数中访问局部变量

来自分类Dev

如何在方法-Vue中访问局部变量的状态?

来自分类Dev

C#Func:在块中访问局部变量

来自分类Dev

在绑定文件中访问局部变量的分层路径?

来自分类Dev

JVMTI Agent中的访问线程局部变量

来自分类Dev

如何访问主代码块中的局部变量?

来自分类Dev

我可以从__asm块外部访问__asm变量吗?

来自分类Dev

如何从C / C ++访问lua脚本中的局部变量或调用局部函数?

来自分类Java

我无法在ASM JAVA中加载用于invokedynamic的局部变量

来自分类Dev

在_start函数(x86 ASM)中作为局部变量写入堆栈

来自分类Dev

如何访问局部变量(函数内部的变量)和头文件中的变量的ICElement?

来自分类Java

匿名类访问局部变量

来自分类Dev

访问覆盖的父方法的局部变量

来自分类Dev

何时可以访问局部变量?

来自分类Dev

在函数外部访问局部变量

来自分类Dev

通过Main()方法访问局部变量

来自分类Dev

如何访问内部类的局部变量

来自分类Dev

计算字段不能访问局部变量?

Related 相关文章

  1. 1

    Java ASM - 如何在方法中创建局部变量

  2. 2

    在内部类中访问局部变量(java)

  3. 3

    如何使局部变量在Java中的循环外可访问

  4. 4

    如何通过将局部变量存储到Java Android中的类变量(全局)来访问局部变量

  5. 5

    在 *ngIf 中访问局部变量

  6. 6

    在C中访问bash局部变量

  7. 7

    无法在for,php中访问局部变量

  8. 8

    访问最终局部变量是否比Java中的类变量更快?

  9. 9

    在 Android Java/Kotlin 中,实现接口是否可以直接访问嵌套类的局部变量

  10. 10

    局部变量与方法访问

  11. 11

    Java在封闭范围内访问局部变量

  12. 12

    在回调函数中访问局部变量

  13. 13

    如何在方法-Vue中访问局部变量的状态?

  14. 14

    C#Func:在块中访问局部变量

  15. 15

    在绑定文件中访问局部变量的分层路径?

  16. 16

    JVMTI Agent中的访问线程局部变量

  17. 17

    如何访问主代码块中的局部变量?

  18. 18

    我可以从__asm块外部访问__asm变量吗?

  19. 19

    如何从C / C ++访问lua脚本中的局部变量或调用局部函数?

  20. 20

    我无法在ASM JAVA中加载用于invokedynamic的局部变量

  21. 21

    在_start函数(x86 ASM)中作为局部变量写入堆栈

  22. 22

    如何访问局部变量(函数内部的变量)和头文件中的变量的ICElement?

  23. 23

    匿名类访问局部变量

  24. 24

    访问覆盖的父方法的局部变量

  25. 25

    何时可以访问局部变量?

  26. 26

    在函数外部访问局部变量

  27. 27

    通过Main()方法访问局部变量

  28. 28

    如何访问内部类的局部变量

  29. 29

    计算字段不能访问局部变量?

热门标签

归档