java table 设置长度_Java字节码lookupswitch和tableswitch总指令长度
使用给定的字节码,当遇到切换指令时,我想知道下一条指令的位置(不运行代码).为了做到这一点,我想我应该计算指令的总大小,包括跳转偏移或匹配偏移对.这可能吗?如果不是,怎么可能知道下一条指令在哪里?
此外,还有其他任何具有动态大小的字节码指令(它们的大小基于变量)吗?
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总指令长度相关推荐
- 【Java 虚拟机原理】Class 字节码二进制文件分析 六 ( 属性类型 | Code 属性 | 属性名称索引 | 属性长度 | 操作数栈最大深度 | 局部变量存储空间 | 字节码长度 )
文章目录 前言 一.属性类型 二.Code 属性表数据结构 三.属性名称索引 四.属性长度 五.操作数栈最大深度 六.局部变量存储空间 七.字节码长度 八.存储字节码指令的一系列字节流 前言 上一篇博 ...
- java 魔数_Java 字节码结构解析
本文通过解析Class文件中字节码的结构,来加深对Java类文件结构的理解.建议先阅读Java类文件结构解析这篇文章. Test.java package org.tianbin.clazz; pub ...
- java中字节码_Java字节码执行图示
★ 查看具体的执行图示,需要先了解一下 java 线程执行的地方,Java 每一个线程执行字节码指令都是在 jvm 虚拟机栈中完成 " 1.JVM 虚拟机栈 每一条 JVM 线程都有自己私有 ...
- java忍者_Java字节码忍者禁术
Java语言本身是由Java语言规格说明(JLS)所定义的,而Java虚拟机的可执行字节码则是由一个完全独立的标准,即Java虚拟机规格说明(通常也被称为VMSpec)所定义的. JVM字节码是通过j ...
- [Java安全]—动态加载字节码文件
ClassLoader加载远程字节码 POC import java.io.IOException; import java.net.URL; import java.net.URLClassLoad ...
- 【Java 虚拟机原理】Class 字节码二进制文件分析 七 ( 局部变量表分析 )
文章目录 前言 一.编译生成带局部变量表的字节码文件 二.局部变量表 前言 上一篇博客 [Java 虚拟机原理]Class 字节码二进制文件分析 二 ( 常量池位置 | 常量池结构 | tag | i ...
- 【Java 虚拟机原理】Class 字节码二进制文件分析 五 ( 方法计数器 | 方法表 | 访问标志 | 方法名称索引 | 方法返回值类型 | 方法属性数量 | 方法属性表 )
文章目录 前言 一.方法表结构 二.方法计数器 三.方法表数据解析 ( init 构造方法 ) 1.方法访问标志 2.方法名称索引 3.方法返回类型 4.方法属性数量 前言 上一篇博客 [Java 虚 ...
- 【Java 虚拟机原理】Class 字节码二进制文件分析 四 ( 字段表数据结构 | 字段表详细分析 | 访问标志 | 字段名称 | 字段描述符 | 属性项目 )
文章目录 前言 一.字段表总数据结构 二.访问标志 三.字段名称 四.字段描述符 五.属性项目数 前言 上一篇博客 [Java 虚拟机原理]Class 字节码二进制文件分析 三 ( 访问和修饰标志 | ...
- 【Java 虚拟机原理】Class 字节码二进制文件分析 三 ( 访问和修饰标志 | 类索引 | 父类索引 | 接口计数器 | 接口表 | 字段计数器 | 字段表 )
文章目录 前言 一.访问和修饰标志 二.类索引 三.父类索引 四.接口计数器 五.接口表 六.字段计数器 七.字段表 前言 上一篇博客 [Java 虚拟机原理]Class 字节码二进制文件分析 二 ( ...
最新文章
- PCB板上字母表示的含义
- ie浏览器中 overflow:hidden无作用的解决方案
- [C# 基础知识梳理系列]专题二:委托的本质论
- 表的插入、更新、删除、合并操作_1_插入新的记录
- 跨计算机建立视图_计算机二级office
- 图解,C语言希尔排序
- [******] 堆排序
- 1688: [Usaco2005 Open]Disease Manangement 疾病管理( 枚举 )
- 费式序列(斐波那契数列)
- 3D游戏角色建模设计这样做,模型满分!
- 深度学习数学基础 讲义_深度学习入门部分的讲义3
- 基于STM32的指纹锁
- win10 断针测试软件,修复损坏的系统文件,就用系统文件检查器SFC,简单高效
- BioNano生物纳米分子的“原始数据到完成装配和组装分析”管线与基于序列的基因组FASTA映射...
- javaeejsp文件放哪_超级整理丨家庭文件、网盘资料的分类命名
- 【MATLAB教程案例39】语音信号的PCM编解码matlab仿真学习
- Python file
- turtle画画灵魂画手之海绵宝宝
- pm在APP、产品设计中如何有效埋点
- 2022-Softing线上汽车电子大会
热门文章
- Java之品优购课程讲义_day20(2)
- mysql 原理~ 乐观锁和悲观锁
- 《计算机网络:自顶向下方法(原书第6版)》一第1章
- 算法之美--2.2数组
- Android TextView,EditText要求固定行数自动调整TextSize
- Word文档处理控件TX Text Control .NET for WPF
- 线性表【01】线性表的类型定义
- Session保存到Memcache
- java 操作系统 模拟 daima_编写一个程序,利用Java语言模拟操作系统进程调度管理...
- 共享的网络如何让自己比别人快_ipfs网络的分布式数据是如何做到数据共享的?...