使用给定的字节码,当遇到切换指令时,我想知道下一条指令的位置(不运行代码).为了做到这一点,我想我应该计算指令的总大小,包括跳转偏移或匹配偏移对.这可能吗?如果不是,怎么可能知道下一条指令在哪里?

此外,还有其他任何具有动态大小的字节码指令(它们的大小基于变量)吗?

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,bytecode

来源: https://codeday.me/bug/20190829/1760377.html

java table 设置长度_Java字节码lookupswitch和tableswitch总指令长度相关推荐

  1. 【Java 虚拟机原理】Class 字节码二进制文件分析 六 ( 属性类型 | Code 属性 | 属性名称索引 | 属性长度 | 操作数栈最大深度 | 局部变量存储空间 | 字节码长度 )

    文章目录 前言 一.属性类型 二.Code 属性表数据结构 三.属性名称索引 四.属性长度 五.操作数栈最大深度 六.局部变量存储空间 七.字节码长度 八.存储字节码指令的一系列字节流 前言 上一篇博 ...

  2. java 魔数_Java 字节码结构解析

    本文通过解析Class文件中字节码的结构,来加深对Java类文件结构的理解.建议先阅读Java类文件结构解析这篇文章. Test.java package org.tianbin.clazz; pub ...

  3. java中字节码_Java字节码执行图示

    ★ 查看具体的执行图示,需要先了解一下 java 线程执行的地方,Java 每一个线程执行字节码指令都是在 jvm 虚拟机栈中完成 " 1.JVM 虚拟机栈 每一条 JVM 线程都有自己私有 ...

  4. java忍者_Java字节码忍者禁术

    Java语言本身是由Java语言规格说明(JLS)所定义的,而Java虚拟机的可执行字节码则是由一个完全独立的标准,即Java虚拟机规格说明(通常也被称为VMSpec)所定义的. JVM字节码是通过j ...

  5. [Java安全]—动态加载字节码文件

    ClassLoader加载远程字节码 POC import java.io.IOException; import java.net.URL; import java.net.URLClassLoad ...

  6. 【Java 虚拟机原理】Class 字节码二进制文件分析 七 ( 局部变量表分析 )

    文章目录 前言 一.编译生成带局部变量表的字节码文件 二.局部变量表 前言 上一篇博客 [Java 虚拟机原理]Class 字节码二进制文件分析 二 ( 常量池位置 | 常量池结构 | tag | i ...

  7. 【Java 虚拟机原理】Class 字节码二进制文件分析 五 ( 方法计数器 | 方法表 | 访问标志 | 方法名称索引 | 方法返回值类型 | 方法属性数量 | 方法属性表 )

    文章目录 前言 一.方法表结构 二.方法计数器 三.方法表数据解析 ( init 构造方法 ) 1.方法访问标志 2.方法名称索引 3.方法返回类型 4.方法属性数量 前言 上一篇博客 [Java 虚 ...

  8. 【Java 虚拟机原理】Class 字节码二进制文件分析 四 ( 字段表数据结构 | 字段表详细分析 | 访问标志 | 字段名称 | 字段描述符 | 属性项目 )

    文章目录 前言 一.字段表总数据结构 二.访问标志 三.字段名称 四.字段描述符 五.属性项目数 前言 上一篇博客 [Java 虚拟机原理]Class 字节码二进制文件分析 三 ( 访问和修饰标志 | ...

  9. 【Java 虚拟机原理】Class 字节码二进制文件分析 三 ( 访问和修饰标志 | 类索引 | 父类索引 | 接口计数器 | 接口表 | 字段计数器 | 字段表 )

    文章目录 前言 一.访问和修饰标志 二.类索引 三.父类索引 四.接口计数器 五.接口表 六.字段计数器 七.字段表 前言 上一篇博客 [Java 虚拟机原理]Class 字节码二进制文件分析 二 ( ...

最新文章

  1. PCB板上字母表示的含义
  2. ie浏览器中 overflow:hidden无作用的解决方案
  3. [C# 基础知识梳理系列]专题二:委托的本质论
  4. 表的插入、更新、删除、合并操作_1_插入新的记录
  5. 跨计算机建立视图_计算机二级office
  6. 图解,C语言希尔排序
  7. [******] 堆排序
  8. 1688: [Usaco2005 Open]Disease Manangement 疾病管理( 枚举 )
  9. 费式序列(斐波那契数列)
  10. 3D游戏角色建模设计这样做,模型满分!
  11. 深度学习数学基础 讲义_深度学习入门部分的讲义3
  12. 基于STM32的指纹锁
  13. win10 断针测试软件,修复损坏的系统文件,就用系统文件检查器SFC,简单高效
  14. BioNano生物纳米分子的“原始数据到完成装配和组装分析”管线与基于序列的基因组FASTA映射...
  15. javaeejsp文件放哪_超级整理丨家庭文件、网盘资料的分类命名
  16. 【MATLAB教程案例39】语音信号的PCM编解码matlab仿真学习
  17. Python file
  18. turtle画画灵魂画手之海绵宝宝
  19. pm在APP、产品设计中如何有效埋点
  20. 2022-Softing线上汽车电子大会

热门文章

  1. Java之品优购课程讲义_day20(2)
  2. mysql 原理~ 乐观锁和悲观锁
  3. 《计算机网络:自顶向下方法(原书第6版)》一第1章
  4. 算法之美--2.2数组
  5. Android TextView,EditText要求固定行数自动调整TextSize
  6. Word文档处理控件TX Text Control .NET for WPF
  7. 线性表【01】线性表的类型定义
  8. Session保存到Memcache
  9. java 操作系统 模拟 daima_编写一个程序,利用Java语言模拟操作系统进程调度管理...
  10. 共享的网络如何让自己比别人快_ipfs网络的分布式数据是如何做到数据共享的?...