Java字节码lookupswitch和tableswitch总指令长度
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java字节码lookupswitch和tableswitch总指令长度,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1217字,纯文字阅读大概需要2分钟。
内容图文
![Java字节码lookupswitch和tableswitch总指令长度](/upload/InfoBanner/zyjiaocheng/726/7edce2c158f1495e9187c4d52498124d.jpg)
使用给定的字节码,当遇到切换指令时,我想知道下一条指令的位置(不运行代码).为了做到这一点,我想我应该计算指令的总大小,包括跳转偏移或匹配偏移对.这可能吗?如果不是,怎么可能知道下一条指令在哪里?
此外,还有其他任何具有动态大小的字节码指令(它们的大小基于变量)吗?
tableswitch
tableswitch
<0-3 byte pad>
defaultbyte1
defaultbyte2
defaultbyte3
defaultbyte4
lowbyte1
lowbyte2
lowbyte3
lowbyte4
highbyte1
highbyte2
highbyte3
highbyte4
jump offsets...
lookupswitch
lookupswitch
<0-3 byte pad>
defaultbyte1
defaultbyte2
defaultbyte3
defaultbyte4
npairs1
npairs2
npairs3
npairs4
match-offset pairs...
解决方法:
您需要读取高和低(对于tableswitch)和npairs(对于loopkupswitch)的值.
此外,defaultbyte1始终从一个地址开始,该地址是当前方法开头的四个字节的倍数.在操作码之后立即需要0到3个字节之间的填充.
对于操作码,表格开关的长度等于1,对于填充,最多3个字节,默认跳跃偏移为4个字节,对于每个跳跃偏移,高4个字节为4个字节(其中有高 – 低1个).总共:
1 + p + 4 + 4 + 4 + 4*(high-low+1)
其中p是0到3之间的填充.
对于操作码,lookupswitch的长度等于1字节,对于填充,4字节用于默认跳跃偏移4字节用于每对匹配和跳跃偏移的对数(npairs)8字节.总共:
1 + p + 4 + 4 + 8*(npairs)
其中p是0到3之间的填充.
还有另一条指令wide,其长度可以是4或6个字节.如果以下操作码是iinc,则长度为6.否则,它为4.
内容总结
以上是互联网集市为您收集整理的Java字节码lookupswitch和tableswitch总指令长度全部内容,希望文章能够帮你解决Java字节码lookupswitch和tableswitch总指令长度所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。