首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASM4.0树API: InsnNodes中字节码的映射?

ASM4.0树API: InsnNodes中字节码的映射?
EN

Stack Overflow用户
提问于 2013-02-22 17:30:03
回答 1查看 549关注 0票数 2

据推测,整个方法主体将在InsnList中进行处理和转换,其中包含一组AbstractInsnNode,以及一些非字节码节点(如FrameNodeLineNumberNode等)。XXXNode类javadoc通常包含一些有用的信息(例如,哪些操作码映射到这个XXXNode),但是映射似乎并不是完全的,所以我不完全确定在所有情况下会发生什么:

  • WIDE字节码会发生什么?它会自动折叠到下一个指令中吗?大概是这样,但我找不到任何明确声明
  • 所有的最不发达国家指令(LDCLDC_2LDC_2W)都映射到LdcInsnNodes吗?想必是这样,但文件上没有说

一般来说,java字节码-> ASM类是否有方便的映射?我正在对java字节码序列(即方法体)进行一些处理,并希望检查我可能收到的所有字节码(全部大约200个字节码)是否映射到我正在正确处理的ASM数据结构。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-22 19:10:32

是的,你对最不发达国家的指示是正确的。

ASM没有像org.objectweb.asm.Opcodes接口的Java (http://asm.ow2.org/asm40/javadoc/user/index.html)中所提到的那样将Java字节码中的操作码映射到API。

public interface Opcodes 定义JVM操作码、访问标志和数组类型代码。此接口并不定义所有JVM操作码,因为某些操作码是自动处理的。例如,如果可能,xLOAD和xSTORE操作码将被xLOAD_n和xSTORE_n操作码自动替换。因此,在这个接口中没有定义xLOAD_n和xSTORE_n操作码。同样,对于最不发达国家,在必要时自动由LDC_W或LDC2_W、WIDE、GOTO_W和JSR_W代替。

这将转换为ASM中的其他API。

在此也可以证实这一点:

首先,请注意,ASM没有提供来自原始字节码.- http://osdir.com/ml/java.objectweb.asm/2008-03/msg00031.html的精确一对一映射。

对于问题的第二部分,您可以尝试使用FAQ:http://asm.ow2.org/doc/faq.html#Q10中提到的http://asm.ow2.org/doc/faq.html#Q10。它将基本上列出您必须使用ASM调用的Java指令,以创建给定的ByteCode指令序列。

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

https://stackoverflow.com/questions/15029949

复制
相关文章

相似问题

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