首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java ASM -从AbstractInsnNode获取LabelNode

Java ASM -从AbstractInsnNode获取LabelNode
EN

Stack Overflow用户
提问于 2014-02-23 05:27:48
回答 1查看 400关注 0票数 0

我一直在使用一些asm (使用Minecraft的Transform类,但它不应该是相关的),但我总是在使用NoClassDefFoundError和NullPointerException时崩溃。我已经缩小了问题的范围和理论上的解决方案。

我试图在操作数23处注入代码,但代码将包含一个跳转到代码中其他地方(操作数68处)已经存在的标签。(m是methodNode)

代码语言:javascript
复制
m.instructions.insert(m.instructions.get(23), ConfigPatch1());

要注入的代码:

代码语言:javascript
复制
InsnList toInject = new InsnList();
toInject.add(new VarInsnNode(ALOAD, 0));
toInject.add(new InsnNode(ICONST_0));
toInject.add(new MethodInsnNode(INVOKEVIRTUAL, "java/lang/String", "charAt", "(I)C"));
toInject.add(new IntInsnNode(BIPUSH, 33));
toInject.add(new JumpInsnNode(IF_ICMPEQ, 68sLabelNode));
return toInject;        

最后一个加法应该具有操作数68处的LabelNode的标签。我试过使用:

代码语言:javascript
复制
(LabelNode) m.instructions.get(68)

但是随后我得到了一个“栈上的错误操作数”错误;似乎表明类型转换是错误的。get返回一个AbstractInsnNode。

如何从操作数68获取LabelNode,以便在注入中使用它?

谢谢你,StackOverflow!

EN

回答 1

Stack Overflow用户

发布于 2014-02-23 14:26:44

我不确定,但我认为您可以创建一个新的LabelNode,并将其插入到指令#68之前,然后跳转到它。

而且,使用InstructionAdapter比直接使用new创建指令更方便。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21960813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档