i++ 反编译码
1、特点:
操作数栈,主要用于保存计算过程中的结果,同时作为集计算过程中变量临时的存储空间。
操作数栈就是JVM执行引擎的一个工作区,当方法执行开始,一个新栈帧也会随之被创建,这个方法的操作数栈是空的。
每一个操作数栈都会拥有一个明确的栈深入用于存储数据值。
我们说是java虚拟机的解释引擎是基于栈的执行引擎,其中的栈指的就是操作数栈。
如果被调用的方法带有返回值的话,其返回值将被压入当前栈帧操作数栈中。
2、执行过程
反编译字节码文件
1、第一步:
bipush:将值压入操作数栈的操作。
istore_1:将栈顶指针指向的值放入局部变量表中索引为1的地方。
iload_1:将局部变量表中索引为1的值压入操作数栈中
iadd:让操作数栈中数字纷纷出栈,通过 执行引擎进行add操作。
PC寄存器中存储第0的指令地址,然后对应指令地址执行对应的操作指令bipush。将15压入操作数栈,此时栈顶指针指向15。
PC寄存中存入2的地址指令,15出栈,进入局部变量表中索引为1的位置(istore_1)(索引为0的位置存放的this)
2、第二部
8压入操作数栈(bipush),然后出栈进入局部变量表索引为2的位置(istore_2)
3、第三步
iload_1 和 iload_2 分别将局部变量表中的15和8放入操作数栈中。
4、第四步
将操作数栈中的15和8分别出栈,进行iadd操作,相加后的值再次压入到操作数栈中。然后执行istore_3.。将23出栈,放入局部变量表索引为3的地方。
3、i = i++值不变
i = 0;
i = i++;
反编译:
数字的:1,2,..6,7:是pc寄存器存储的指令地址,指示执行对应的操作指令。
0:iconst_0; // 将int类型的0 入栈
1:istore_1; // 将栈顶0弹出,保存到局部变量 index索引值为1 的位置。
2:iload_1; // 将局部变量表 index 1位置的值的副本入栈,(此时:局部变量表 index为1的值是0,操作数栈顶的值是0)
3:iinc_1,1; // iinc是对int类型的值进行自增操作(局部变量表index 1的值执行了自增变为了1,单操作数栈中的值仍然为0)
6:istore_1; // 操作数栈顶的值弹出(值为 0),放到局部变量表index 1的位置(旧值:1,新值:0),覆盖到上一步的局部变量表中。
7:iload_1; // 将局部变量表index 1的位置的副本入栈
转发连接:https://blog.csdn.net/weixin_44717746/article/details/107774945
i++ 反编译码的更多相关文章
- LDPC编译码基本原理
LDPC编译码基本原理 学习笔记 V1.1 2015/02/18 LDPC编译码基本原理 概述 本文是个人针对LDPC的学习笔记,主要针对LDPC译码算法做了简要的总结.该版本主要致力 ...
- Java&Android反编工具打包
Java&Android反编工具: 1.Eclipse反编插件:安装到Eclipse后,可以简要的查看jar包中的*.class; 2.DoAPK:反编*.apk为smali和一些资源文件,可 ...
- CCSDS标准的LDPC编译码仿真
html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...
- JAVA反编工具件安装 JD-eclipse
想看Android API源码,但是只有class文件,于是找了个反编译工具Java Decompiler,免费的反编译工具.eclipse插件:JD-eclipse. 安装步骤: 1.确保计算机上 ...
- 快速反编绎jar war包
反编译这些class文件或jar包或war包,用TTools https://github.com/Supermax197/TTools [root@ok action]# tree /home/ok ...
- Android反编工具的使用-Android Killer
今天百度搜索"Android反编译"搜索出来的结果大多数都是比較传统的教程.刚接触反编译的时候,我也是从这些教程慢慢学起的.在后来的学习过程中,我接触到比較方便操作的Android ...
- PhotoShop算法原理解析系列 - 风格化---》查找边缘。
之所以不写系列文章一.系列文章二这样的标题,是因为我不知道我能坚持多久.我知道我对事情的表达能力和语言的丰富性方面的天赋不高.而一段代码需要我去用心的把他从基本原理-->初步实现-->优化 ...
- Scala变量| 流程控制
Scala 是 Scalable Language 的简写,是一门多范式(编程的方式)的编程语言 Scala是一门以java虚拟机(JVM)为目标运行环境并将面向对象和函数式编程的最佳特性结合在一起的 ...
- apk 解包 打包
APK应用程序的解包.修改.编辑.汉化.打包及应用 前两讲主要讲玩机的最基本的知识,集中在如何刷机.本讲是进级的内容,来谈谈与apk应用程序有关的知识,内容包括akp文件的解包.打包.反编辑.解析.汉 ...
随机推荐
- 让HTML和JSP页面不缓存从Web服务器上重新获取页面
感谢原文作者:佚名 原文链接:https://www.jb51.net/web/100639.html 问题描述 用户退出后,如果点击浏览器上的后退按钮,Web应用将不能正确保护受保护的页面--在Se ...
- SharedPreferences介绍
sharedPreferences是通过xml文件来做数据存储的. 一般用来存放一些标记性的数据,一些设置信息. 使用sharedPreferences存储数据 ...
- zabbix 监控系统概述及部署
zabbix 监控系统概述及部署 1.Zabbix是什么: zabbix是一个个基于web界而的提供分布式系统监视以及网络监视功能的企业级的开源解决方案. zabbix能监视各种网络参数,保证服务器系 ...
- ASP.NET Core 6框架揭秘实例演示[02]:基于路由、MVC和gRPC的应用开发
ASP.NET Core可以视为一种底层框架,它为我们构建出了基于管道的请求处理模型,这个管道由一个服务器和多个中间件构成,而与路由相关的EndpointRoutingMiddleware和Endpo ...
- weblogic12c安装笔记
weblogic12c安装笔记 1.创建wls用户 useradd wls 2.切换到wls用户 su - wls 3.在/home/wls/创建files.jdk1.8.patch.bao目录 mk ...
- windows gdi+ Bitmap 总结
windows gdi+ 是对 windows gdi 的一个c++封装,同时增加了一些扩展功能,如反走样,样条曲线,变换矩阵,图像编解码等. gdi+ 相对于 gdi 也存在一些不足之处,如 执行效 ...
- Solution -「Code+#2」「洛谷 P4033」白金元首与独舞
\(\mathcal{Description}\) link. 给定一个 \(n\times m\) 的网格图,一些格子指定了走出该格的方向(上下左右),而有 \(k\) 格可以任意指定走出方 ...
- Solution -「CF 1392H」ZS Shuffles Cards
\(\mathcal{Description}\) Link. 打乱的 \(n\) 张编号 \(1\sim n\) 的数字排和 \(m\) 张鬼牌.随机抽牌,若抽到数字,将数字加入集合 \(S ...
- Flask中本地栈的使用
4种上下文变量 承接上一篇内容.当一个请求到来时,除了request被封装成全局变量之外,还有三个变量也是同样被封装成全局变量,那就是current_app.g.session.上面4个变量之所以能够 ...
- C#Winform 注册使用全局快捷键详解
C#.NET Winform 注册使用全局快捷键详解 借助于全局快捷键,用户可以在任何地方操控程序,触发对应的功能.但 WinForms 框架并没有提供全局快捷键的功能.想要实现全局快捷键需要跟 Wi ...