Lightcolour 发表于 2019-9-20 09:22

《re:从零开始的java逆向基础》#2操作数栈

操作数栈在执行字节码指令的时候使用,它和通用寄存器在 native CPU 中使用的方式类似。大多数 JVM 字节码通过 pushing,popping,duplicating,swapping,或生产消费值的操作使用操作数栈 我们先运行一个例子 比如return 一个 a/2 public class Main{      public static int main(int a) {         return a /2;      }    }Java -c -verbose 反编译Code:      stack=2, locals=1, args_size=1         0: iload_0         1: iconst_2         2: idiv         3: ireturn      LineNumberTable:      line 3: 0 iload_0 就是aiconst_2 也就是2idiv 前面两个数相除ireturn 返回值、 我们再写复杂点returna / 2.0d返回一个双浮点 public class Main{      public static double main(double a) {         return a / 2.0d;      }    } Java -c -verbose 反编译 Code:      stack=4, locals=2, args_size=1         0: dload_0         1: ldc2_w      #2                  // double 2.0d         4: ddiv         5: dreturn      LineNumberTable:      line 3: 0 dload_0 就是a ldc2_w 就是2.0dddiv 两个相除dreturn 返回值 在看看两个参数 public class Main{      public static int main(int a,int b) {         return a + b;      }    } Java -c -verbose 反编译     Code:      stack=2, locals=2, args_size=2         0: iload_0         1: iload_1         2: iadd         3: ireturn      LineNumberTable:      line 3: 0 iload_0 就是 a iload_1 就是 biadd 两数相加ireturn 返回值 再看看长整型 public class Main{      public static long main(long a,longb) {         return a + b;      }    } Java -c -verbose 反编译     Code:      stack=4, locals=4, args_size=2         0: lload_0         1: lload_2         2: ladd         3: lreturn      LineNumberTable:      line 3: 0 lload_0 就是alload_2 就是 bladd 两数相加lreturn 返回值 再写一个混合 public class Main{      public static int main(int a,intb,int c) {         return c*a + b;      }    } Java -c -verbose 反编译     Code:      stack=2, locals=3, args_size=3         0: iload_2         1: iload_0         2: imul         3: iload_1         4: iadd         5: ireturn      LineNumberTable:      line 3: 0 iload_2 就是ciload_ 就是 aimul 两数相乘iload_1 就是biadd 两数相加ireturn 返回值本集资源word文档**** Hidden Message *****

50311048 发表于 2019-9-20 23:27

你将受到所有人的崇拜!

PHT1314 发表于 2020-4-2 13:52

你将受到所有人的崇拜!

拿着雪糕 发表于 2022-2-5 12:14

感谢分享,学习一下

NZbn70245 发表于 2022-2-22 14:27

谢谢分享

沙画 发表于 2022-3-9 12:38

感谢楼主分享。

omgTsQ6917 发表于 2022-3-9 14:09

感谢楼主

我是好人 发表于 2022-3-9 14:10

[快捷回复]-学破解防逆向,知进攻懂防守!

pjkxPYsh 发表于 2022-3-9 14:10

感谢楼主

sjhvBc 发表于 2022-3-9 14:10

谢谢分享
页: [1] 2 3 4 5 6 7 8 9
查看完整版本: 《re:从零开始的java逆向基础》#2操作数栈