论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
后端开发
›
Java
›
java反汇编命令手册
java反汇编命令手册
雁过留声
金牌会员
|
2024-5-18 11:14:34
|
显示全部楼层
|
阅读模式
楼主
主题
845
|
帖子
845
|
积分
2535
1. 栈和局部变量操作
1.1 将常量压入栈的指令
指令功能描述aconst_null将null对象引用压入栈iconst_m1将将int类型常量-1压入栈iconst_0将int类型常量0压入栈iconst_1将int类型常量1压入栈iconst_2将int类型常量2压入栈iconst_3将int类型常量3压入栈iconst_4将int类型常量4压入栈iconst_5将int类型常量5压入栈lconst_0将long类型常量0压入栈lconst_1将long类型常量1压入栈fconst_0将float类型常量0压入栈fconst_1将float类型常量1压入栈dconst_0将double类型常量0压入栈dconst_1将double类型常量1压入栈bipush将一个8位带符号整数压入栈sipush将16位带符号整数压入栈ldc把常量池中的项压入栈ldc_w把常量池中的项压入栈(利用宽索引)ldc2_w把常量池中long类型或者double类型的项压入栈(利用宽索引)
1.2 从栈中的局部变量中装载值的指令
指令功能描述iload从局部变量中装载int类型值lload从局部变量中装载long类型值fload从局部变量中装载float类型值dload从局部变量中装载double类型值aload从局部变量中装载引用类型值(refernce)iload_0从局部变量0中装载int类型值iload_1从局部变量1中装载int类型值iload_2从局部变量2中装载int类型值iload_3从局部变量3中装载int类型值lload_0从局部变量0中装载long类型值lload_1从局部变量1中装载long类型值lload_2从局部变量2中装载long类型值lload_3从局部变量3中装载long类型值fload_0从局部变量0中装载float类型值fload_1从局部变量1中装载float类型值fload_2从局部变量2中装载float类型值fload_3从局部变量3中装载float类型值dload_0从局部变量0中装载double类型值dload_1从局部变量1中装载double类型值dload_2从局部变量2中装载double类型值dload_3从局部变量3中装载double类型值aload_0从局部变量0中装载引用类型值aload_1从局部变量1中装载引用类型值aload_2从局部变量2中装载引用类型值aload_3从局部变量3中装载引用类型值iaload从数组中装载int类型值laload从数组中装载long类型值faload从数组中装载float类型值daload从数组中装载double类型值aaload从数组中装载引用类型值baload从数组中装载byte类型或boolean类型值caload从数组中装载char类型值saload从数组中装载short类型值
1.3 将栈中的值存入局部变量的指令
指令功能描述istore将int类型值存入局部变量lstore将long类型值存入局部变量fstore将float类型值存入局部变量dstore将double类型值存入局部变量astore将将引用类型或returnAddress类型值存入局部变量istore_0将int类型值存入局部变量0istore_1将int类型值存入局部变量1istore_2将int类型值存入局部变量2istore_3将int类型值存入局部变量3lstore_0将long类型值存入局部变量0lstore_1将long类型值存入局部变量1lstore_2将long类型值存入局部变量2lstore_3将long类型值存入局部变量3fstore_0将float类型值存入局部变量0fstore_1将float类型值存入局部变量1fstore_2将float类型值存入局部变量2fstore_3将float类型值存入局部变量3dstore_0将double类型值存入局部变量0dstore_1将double类型值存入局部变量1dstore_2将double类型值存入局部变量2dstore_3将double类型值存入局部变量3astore_0将引用类型或returnAddress类型值存入局部变量0astore_1将引用类型或returnAddress类型值存入局部变量1astore_2将引用类型或returnAddress类型值存入局部变量2astore_3将引用类型或returnAddress类型值存入局部变量3iastore将int类型值存入数组中lastore将long类型值存入数组中fastore将float类型值存入数组中dastore将double类型值存入数组中aastore将引用类型值存入数组中bastore将byte类型或者boolean类型值存入数组中castore将char类型值存入数组中sastore将short类型值存入数组中wide指令wide利用附加字节扩展局部变量索引
1.4 通用(无类型)栈操作
指令功能描述nop不做任何操作pop弹出栈顶端一个字长的内容pop2弹出栈顶端两个字长的内容dup复制栈顶部一个字长内容dup_x1复制栈顶部一个字长的内容,然后将复制内容及原来弹出的两个字长的内容压入栈dup_x2复制栈顶部一个字长的内容,然后将复制内容及原来弹出的三个字长的内容压入栈dup2复制栈顶部两个字长内容dup2_x1复制栈顶部两个字长的内容,然后将复制内容及原来弹出的三个字长的内容压入栈dup2_x2复制栈顶部两个字长的内容,然后将复制内容及原来弹出的四个字长的内容压入栈swap交换栈顶部两个字长内容
2. 类型转换
指令功能描述i2l把int类型的数据转化为long类型i2f把int类型的数据转化为float类型i2d把int类型的数据转化为double类型l2i把long类型的数据转化为int类型l2f把long类型的数据转化为float类型l2d把long类型的数据转化为double类型f2i把float类型的数据转化为int类型f2l把float类型的数据转化为long类型f2d把float类型的数据转化为double类型d2i把double类型的数据转化为int类型d2l把double类型的数据转化为long类型d2f把double类型的数据转化为float类型i2b把int类型的数据转化为byte类型i2c把int类型的数据转化为char类型i2s把int类型的数据转化为short类型
3. 整数运算
指令功能描述iadd执行int类型的加法ladd执行long类型的加法isub执行int类型的减法lsub执行long类型的减法imul执行int类型的乘法lmul执行long类型的乘法idiv执行int类型的除法ldiv执行long类型的除法irem计算int类型除法的余数lrem计算long类型除法的余数ineg对一个int类型值进行取反操作lneg对一个long类型值进行取反操作iinc把一个常量值加到一个int类型的局部变量上
4. 逻辑运算
4.1 移位操作
指令功能描述ishl执行int类型的向左移位操作lshl执行long类型的向左移位操作ishr执行int类型的向右移位操作lshr执行long类型的向右移位操作iushr执行int类型的向右逻辑移位操作lushr执行long类型的向右逻辑移位操作
4.2 按位布尔运算
指令功能描述iand对int类型值进行land对long类型值进行“逻辑与”操作ior对int类型值进行“逻辑或”操作lor对long类型值进行“逻辑或”操作ixor对int类型值进行“逻辑异或”操作lxor对long类型值进行“逻辑异或”操作
4.3 浮点运算
指令功能描述fadd执行float类型的加法dadd执行double类型的加法fsub执行float类型的减法dsub执行double类型的减法fmul执行float类型的乘法dmul执行double类型的乘法fdiv执行float类型的除法ddiv执行double类型的除法frem计算float类型除法的余数drem计算double类型除法的余数fneg将一个float类型的数值取反dneg将一个double类型的数值取反
5. 对象和数组
指令功能描述
5.1 对象操作指令
指令功能描述new创建一个新对象checkcast确定对象为所给定的类型getfield从对象中获取字段putfield设置对象中字段的值getstatic从类中获取静态字段putstatic设置类中静态字段的值instanceof判断对象是否为给定的类型
5.2 数组操作指令
指令功能描述newarray分配数据成员类型为根本上数据类型的新数组anewarray分配数据成员类型为引用类型的新数组arraylength获取数组长度multianewarray分配新的多维数组
6. 控制流
指令功能描述
6.1 条件分支指令
指令功能描述ifeq如果即是0,则跳转ifne如果不即是0,则跳转iflt如果小于0,则跳转ifge如果大于即是0,则跳转ifgt如果大于0,则跳转ifle如果小于即是0,则跳转if_icmpcq如果两个int值相等,则跳转if_icmpne如果两个int类型值不相等,则跳转if_icmplt如果一个int类型值小于另外一个int类型值,则跳转if_icmpge如果一个int类型值大于或者即是另外一个int类型值,则跳转if_icmpgt如果一个int类型值大于另外一个int类型值,则跳转if_icmple如果一个int类型值小于或者即是另外一个int类型值,则跳转ifnull如果即是null,则跳转ifnonnull如果不即是null,则跳转if_acmpeq如果两个对象引用相等,则跳转if_acmpnc如果两个对象引用不相等,则跳转
6.2 比较指令
指令功能描述lcmp比较long类型值fcmpl比较float类型值(当遇到NaN时,返回-1)fcmpg比较float类型值(当遇到NaN时,返回1)dcmpl比较double类型值(当遇到NaN时,返回-1)dcmpg比较double类型值(当遇到NaN时,返回1)
6.3 无条件转移指令
指令功能描述goto无条件跳转goto_w无条件跳转(宽索引)
6.4 表跳转指令
指令功能描述tableswitch通过索引访问跳转表,并跳转lookupswitch通过键值匹配访问跳转表,并执行跳转操作
6.5 非常
指令功能描述athrow抛出非常或错误finally子句jsr跳转到子例程jsr_w跳转到子例程(宽索引)rct从子例程返回
7. 方法调用与返回
7.1 方法调用指令
指令功能描述invokcvirtual运行时按照对象的类来调用实例方法invokespecial根据编译时类型来调用实例方法invokestatic调用类(静态)方法invokcinterface调用接口方法
7.2 方法返回指令
指令功能描述ireturn从方法中返回int类型的数据lreturn从方法中返回long类型的数据freturn从方法中返回float类型的数据dreturn从方法中返回double类型的数据areturn从方法中返回引用类型的数据return从方法中返回,返回值为void
7.3 线程同步
指令功能描述montiorenter进入并获取对象监视器monitorexit释放并退出对象监视器
如何根据以上指令手册翻译java源码呢?
起首新建一个java类,这里用DemoForJavap.java举个例,源码如下:
package com.example.demo;
public class DemoForJavap{
public int add(){
int a = 1;
int b = 2;
int c = a+b;
return c;
}
}
复制代码
利用javac命令编译成class文件后用javap -c命令进行反汇编
我们主要解读下add这个方法中的汇编码:
public int add();
Code:
0: iconst_1 //将int类型常量1压入操作数栈
1: istore_1 //将int类型值存入局部变量1,此处相当于int a=1;执行完毕
2: iconst_2 //将int类型常量2压入操作数栈
3: istore_2 //将int类型值存入局部变量2,此处相当于int b=2;执行完毕
4: iload_1 //从局部变量1中装载int类型值
5: iload_2 //从局部变量2中装载int类型值
6: iadd //执行int类型的加法
7: istore_3 //将int类型值存入局部变量3,此处相当于int c=a+b;执行完毕
8: iload_3 //从局部变量3中装载int类型值
9: ireturn //从方法中返回int类型的数据,此处相当于return c;执行完毕
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
雁过留声
金牌会员
这个人很懒什么都没写!
楼主热帖
阿里云体验有奖:如何将 PolarDB-X 与 ...
XShell免费版的安装配置教程以及使用教 ...
【如何优化她】教你如何定位不合理的SQ ...
day02-代码实现01
微服务大行其道的今天,Service Mesh是 ...
Elasticsearch 入门实战(5)--Java API ...
无需支付688苹果开发者账号,xcode13打 ...
十年技术进阶路,让我明白了三件要事( ...
鸿蒙3.0来了,这次,我真的想批评鸿蒙 ...
常用类-LocalDate、LocalTime、LocalDa ...
标签云
存储
挺好的
服务器
快速回复
返回顶部
返回列表