Tag: 字节码操作

在内联方法体中invokevirtual的意外指令和参数

我遵循http://asm.ow2.org/current/asm-transformations.pdf中的“3.2.6 Inline Method”中的示例代码,将MethodNode内联到一个调用站点。 我的问题是内联后生成的字节码中出现了一些意外的指令(这些字节码与我的代码不一致),并且问题仅在ifeq在内联方法体之后存在并且xLoad加载堆栈上的variables时才存在。 我还没有find问题的根源。 现在我开始删除所有不明智的代码,旨在用最less的代码重现它。 任何人有好的build议,欢迎。 下面是我现有的创始人之一:问题是不相关的框架,因为问题仍然存在当configurationClassRewiter是COMPUTE_FRAMES|ClassWriter.COMPUTE_MAXS和configurationClassReader ClassReader.SKIP_DEBUG | ClassReader.SKIP_FRAMES ClassReader.SKIP_DEBUG | ClassReader.SKIP_FRAMES 为了简化问题,被调用者的身体是: public invokeExact(Ljava/lang/String;)Z ICONST_0 IRETURN 来电者是: public String invokeExact(String a, String b){ boolean flag = _guard.invokeExact(a); if(flag) { return a; } return b; } 。 MethodWriter调用者的相应的字节码操作跟踪是: public java.lang.String invokeExact(java.lang.String, java.lang.String) …. 4: aload_1 5: astore_3 6: astore 4 8: iconst_0 visitJumpInsn […]