《re:从零开始的java逆向基础》#5跳转、循环
先写一个取绝对值的方法 public class Main{ publicstatic int abs(int i) { if(i< 0) return-i; returni; }} 反编译 Code: stack=1, locals=1, args_size=1 0: iload_0 1: ifge 7 4: iload_0 5: ineg 6: ireturn 7: iload_0 8: ireturnifge 7 是当i大于0的时候跳转到偏移位7ineg 取i的负数 再看看两个参数比较的 public class Main{ publicstatic int abs(int a, int b) { if(a<b) returnb; returnb; }} 反编译 Code: stack=2, locals=2, args_size=2 0: iload_0 1: iload_1 2: if_icmpge 7 5: iload_1 6: ireturn 7: iload_1 8: ireturn iload_0 参数aiload_1 参数bif_icmpge 比较 当a大于b时候跳转到偏移位7 再看看循环 public class Main{ public staticvoid mian(String[] args) { for(inti = 0;i < 5;i++) { System.out.println(i); } }}反编译 Code: stack=2,locals=2, args_size=1 0:iconst_0 1:istore_1 2: iload_1 3:iconst_5 4:if_icmpge 20 7:getstatic #2 // Fieldjava/lang/System.out:Ljava/io/PrintStream; 10: iload_1 11:invokevirtual #3 // Methodjava/io/PrintStream.println:(I)V 14:iinc 1, 1 17:goto 2 20: return LineNumberTable: line 3: 0 line 4: 7 line 3: 14 line 6: 20 StackMapTable: number_of_entries = 2 frame_type= 252 /* append */ offset_delta = 2 locals =[ int ] frame_type= 250 /* chop */ offset_delta = 17 0 将1压入栈1存入本地变量数组2 压入栈3 将 5压入栈4 比较14 指定int增加值17 偏移2 看看switch public class Main{ public static void mian(String[] args) { int value = 0; switch(value) { case 0: System.out.println("0"); break; case 1: System.out.println("1"); break; case 2: System.out.println("2"); break; case 3: System.out.println("3"); break; case 4: System.out.println("4"); break; } }} Code: stack=2, locals=2, args_size=1 0: iconst_0 1: istore_1 2: iload_1 3: tableswitch { // 0 to 4 0: 36 1: 47 2: 58 3: 69 4: 80 default: 88 } 36: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream; 39: ldc #3 // String 0 41: invokevirtual #4 // Methodjava/io/PrintStream.println:(Ljava/lang/String;)V 44: goto 88 47: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream; 50: ldc #5 // String 1 52: invokevirtual #4 // Methodjava/io/PrintStream.println:(Ljava/lang/String;)V 55: goto 88 58: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream; 61: ldc #6 // String 2 63: invokevirtual #4 // Methodjava/io/PrintStream.println:(Ljava/lang/String;)V 66: goto 88 69: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream; 72: ldc #7 // String 3 74: invokevirtual #4 // Methodjava/io/PrintStream.println:(Ljava/lang/String;)V 77: goto 88 80: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream; 83: ldc #8 // String 4 85: invokevirtual #4 // Methodjava/io/PrintStream.println:(Ljava/lang/String;)V 88: return 不用说想必大家已经知道了本集资源word文档**** Hidden Message *****
你将受到所有人的崇拜! 学习 学习 跳转、循环 [修 感谢分享呀 感谢分享,很给力!~ 好像很难学的样子 一头雾水。。。 {:5_193:}感谢分享 感谢大佬分享{:5_116:}