public void method4() {
int i = 1;
int j = 2;
int a = i++;
int b = ++j;
}
使用javap -c 解开class后
0: iconst_1 //从常量池取出1放入操作栈顶
1: istore_1 //把操作栈顶元素保存到本地变量i中 i=1
2: iconst_2 //从常量池取出2放入操作栈顶
3: istore_2 //把操作栈顶元素保存到本地变量j中 j=2
4: iload_1 //把本地变量i放入操作栈顶i=1
5: iinc 1, 1 //执行把本地变量i+1 ,操作栈顶不变
8: istore_3 //把操作栈顶元素保存到本地变量a中
9: iinc 2, 1 //执行把本地变量j+1 ,操作栈顶不变
12: iload_2 //把本来变量j放入栈顶 j=3
13: istore 4 //把栈顶j保存到本地变量,即b=3
15: return
预备知识:
iconst 把int型数据放到操作栈顶
istore 把栈顶int元素保存到本地变量,移除栈顶元素
iload int本地变量放入栈顶
iinc 把int元素自动+1 如iinc 1,1 第一位是本地变量index,第二位是+的数值
iinc 不会改变栈顶元素的值,它只会改变本地变量的值
不知大家从上面的jvm 指令可以他们之前的不同没?
后++ 的顺序是load ----iinc---store
先++ 的顺序是iinc ----load---store
先前说过iinc不会改变栈顶,会直接修改本地变量的值,所有后++会把先前load的值原封不动的保存进去
而后++会先改变本地变量值,然后把本地变量捞出来,再保存
所以如果++i 和i++ 如果用于自增这两个是没有区别的,都相当于i=i+1,但如果是通过这个来赋值
如 int a = i++; int b = ++j; 那么a保存i原有值,b= j+1
注意
int i = 1; System.out.println(i++);
和
int i = 1;i++; System.out.println(i);
的区别,原理和上面一样
分享到:
相关推荐
### 逆向C++编程与反汇编技术详解 #### I. 引言与必要性 随着技术的发展,越来越多的应用程序和恶意软件采用C++语言编写。因此,掌握C++程序的逆向工程技术变得尤为重要。逆向工程师们长期以来依赖汇编语言和C语言...
接口成员是通过 I.M 和 I[A] 形式的成员访问和索引访问表达式访问的,其中 I 是接口类型的实例,M 是该接口类型的方法、属性或事件,A 是索引器参数列表。接口可以由类和结构实现。为了指示类或结构实现接口,在该类...
02.DIY原DEDE,使得可以反汇编得到非标准程序的Forms格式和Procedures的事件(^_^) 03.直接反汇编功能的选项,原DEDE就提供了 "When this is checked DeDe will try to load the target and will read some valueable...
02.DIY原DEDE,使得可以反汇编得到非标准程序的Forms格式和Procedures的事件(^_^) 03.直接反汇编功能的选项,原DEDE就提供了 "When this is checked DeDe will try to load the target and will read some valueable...
javap用于反汇编Java类;jdb是Java的调试工具,等等。 压缩包中的"jdk-1_5_0_22-windows-i586-p.exe"很可能是Windows平台上的安装程序,适用于32位(i586)系统。这个.exe文件会引导用户完成JDK的安装过程,设置...
- **F5、Ctrl+F10、F11、Alt+F10、Ctrl+F9、Alt+F11、Ctrl+Shift+F9、Ctrl+Shift+F5、Ctrl+Shift+F10**:这些组合键用于控制调试会话,包括运行、...执行、应用代码更改、设置断点、重启程序、切换到源视图或反汇编视图等...
2-14 if ( x = 3 ) 和 if (x = = 3) 这两条语句的差别是什么? 解: 语句if(x = 3)把3赋给x,赋值表达式的值为true,作为if语句的条件;语句if(x == 3)首先判断x的值是否为3,若相等条件表达式的值为ture,否则为...
jdk1.6安装教程及环境变量配置: 双击运行"jdk-6u45-windows-x64.exe"程序,依...Javap:Java反汇编器,显示编译类文件中的可访问功能和数据,同时显示字节代码含义。 Jconsole: Java进行系统调试和监控的工具结构图
4. **开发工具**:除了基本的编译器和JVM,JDK还包括了其他开发工具,如`jar`用于打包和管理Java归档文件,`javadoc`用于生成API文档,`jmap`和`jhat`用于分析堆内存,`jconsole`提供JVM监控,还有`javap`反汇编器等...
7. **i++和++i**:这是Java中的自增运算符。`i++`先使用当前的`i`值,然后增加1;`++i`则是先增加1再使用新值。两者在某些情况下会导致计算结果不同。 8. **错误的语句**:在Java中,变量声明必须以大写字母开头,...
Apk-tool是一个开源的工具,主要用于反编译APK文件,它能够解压APK,提取其中的资源文件(如XML布局、图片、音频等),并将Java字节码(.class文件)反汇编成人类可读的Smali代码。通过这种方式,开发者可以查看并...
- `-disass`:仅进行反汇编,不生成Java源代码。 - `-f`:控制字段声明的格式。 - `-ff`:控制方法之间的空行。 - `-i`:显示导入语句。 - `-l`:字符串常量的地址。 - `-lnc`:列出局部变量的名称和类型。 - `-nl`...
8. **类文件解释器**:`javap`命令是Java类文件解释器,用于反汇编.class文件,查看字节码等信息。 9. **运算符分类**:运算符`+`属于算术运算符,它可以用于数字的加法运算,也可以用于字符串的连接。 10. **静态...
这篇文档汇集了2016年至2020年中考英语考试中关于代词和名词的部分真题,主要考察学生对代词的理解和运用能力,包括物主代词、不定代词、反身代词以及代词的用法辨析。 1. 物主代词的使用:题目涉及到了形容词性物...
标签 "jad" 指的是Java反汇编器,它能够将已编译的.class文件转换回接近源代码的形式。"eclipse" 是一个流行的开源集成开发环境(IDE),开发者可以在这个平台上编写、调试和运行Java项目。"myeclipse" 是另一个强大...
- **javap**: 反汇编Java字节码,展示类的详细信息。 **4. 类库升级** JDK 1.5还更新了许多核心类库,如`java.util.concurrent`包,提供了高级并发工具,如Executor框架、Future接口和并发集合,为编写高效的多...
2. **编译器与反汇编器**:如何将汇编代码转换成机器可执行的二进制代码,以及如何将二进制代码反编译回汇编语言。 3. **硬件接口**:理解SD卡控制器的硬件接口,如I/O端口、时序等。 4. **SD卡协议**:熟悉SD卡的...
javap.exe是Java反汇编器,可以将编译后的class文件反汇编成可读的Java字节码。 2. Java基础语法: 在Java中,基本数据类型包括int、byte、short、long、float、double、char和boolean。int[] a = new int[8]; 创建...
因此,在反汇编代码中,如果发现频繁使用ECX寄存器,尤其是在函数调用之前对其进行赋值,则该函数很可能是某个类的成员函数。 - **示例代码**:在以下示例中,可以看到ECX寄存器用于传递`this`指针,紧接着调用了一...
17. JDK工具:JDK包含了许多工具,如javac用于编译,Javap用于反汇编字节码,而Appletviewer是用于测试Applet的,不包含在最新的JDK版本中。 18. 无限循环:for(;;)是一个无限循环,所以A) 是正确的循环体。 19. ...