Java反编译字节码文件查看详解

反编译查看具体详情字节码
在这里插入图片描述
javap -v 自带的编译命令
stack 操作数栈 栈深度 也算是数字数组长度
locals 局部变量表长度 也算是数组长度
在这里插入图片描述

jclasslib工具
Descriptor<()V> ()说明没有入参,V是没有返回值
Access flags 权限 []这是默认的,如果是public static那么[]会换成public static
在这里插入图片描述
那个0,3,4的号就是指令地址或者偏移地址,PC寄存器存着这些地址,由执行引擎通过地址获取到后面的指令,比如lde,而执行引擎会操作局部变量表,操作数栈来进行一系列操作
在这里插入图片描述
第一列会放进PC寄存器又叫程序计数器里 第二列具体字节码指令 第三列符号引用 解析后指向常量池具体引用 在栈帧中叫动态链接
在这里插入图片描述
Maximum local variables 空间大小 最基本的存储单元slot(变量槽)(字)32位以下占一个, 除了long double因为是64位占俩个变量槽 其余一个变量槽(包含returnAddress类型)
Code lenght 25 表示有25条指令,上面的ByteCode就是0-24 就是25条指令了
在这里插入图片描述
LineNumberTable就是Java代码的行号和字节码指令行号的对应关系,
java代码的45行就是对应的字节码指令指令地址0
java代码的46行就是对应的字节码指令指令地址10
在这里插入图片描述

局部变量表是一个数字数组,查看LocalVariableTable
Descriptor L开头说明是引用,Name是变量名,index是数字数组的索引
Start PC和lenght就是指明作用域范围,String s作用域是指令地址是10 有效长度15 也就是说它的作用域就是10+15 总指令行数是25 也就是它从指令地址第10开始可以被使用,根据上面LineNumberTable的关系也就是java从第46行,作用域到最后一行,也就是声明new String的下一行作用到最后一行
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值