javap 反汇编

àì夳堔傛蜴生んèń 2023-10-08 13:02 133阅读 0赞

文章目录

  • 1、把一个java类反汇编
    • 1.1、写一个类Hello.java
    • 1.2、javac 编译
    • 1.3、javap 反汇编
  • 2、分析汇编代码

1、把一个java类反汇编

1.1、写一个类Hello.java

Hello.java

  1. public class Hello {
  2. private Integer num1 = 0;
  3. private Integer num2;
  4. public Integer getNum(Integer num){
  5. this.num1 += num;
  6. this.num2 = num * 100;
  7. return num2 + num1;
  8. }
  9. public static void main(String[] args) {
  10. Hello h = new Hello();
  11. System.out.println(h.getNum(20));
  12. }
  13. }

1.2、javac 编译

输入指令:javac Hello.java
得到Hello.class

  1. public class Hello {
  2. private Integer num1 = 0;
  3. private Integer num2;
  4. public Hello() {
  5. }
  6. public Integer getNum(Integer var1) {
  7. this.num1 = this.num1 + var1;
  8. this.num2 = var1 * 100;
  9. return this.num2 + this.num1;
  10. }
  11. public static void main(String[] var0) {
  12. Hello var1 = new Hello();
  13. System.out.println(var1.getNum(20));
  14. }
  15. }

1.3、javap 反汇编

输入指令:javap -c Hello
得到反汇编内容

  1. 警告: 二进制文件Hello包含Hello
  2. Compiled from "Hello.java"
  3. public class Hello {
  4. public Hello();
  5. Code:
  6. 0: aload_0
  7. 1: invokespecial #1 // Method java/lang/Object."<init>":()V
  8. 4: aload_0
  9. 5: iconst_0
  10. 6: invokestatic #2 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
  11. 9: putfield #3 // Field num1:Ljava/lang/Integer;
  12. 12: return
  13. public java.lang.Integer getNum(java.lang.Integer);
  14. Code:
  15. 0: aload_0
  16. 1: astore_2
  17. 2: aload_2
  18. 3: aload_2
  19. 4: getfield #3 // Field num1:Ljava/lang/Integer;
  20. 7: invokevirtual #4 // Method java/lang/Integer.intValue:()I
  21. 10: aload_1
  22. 11: invokevirtual #4 // Method java/lang/Integer.intValue:()I
  23. 14: iadd
  24. 15: invokestatic #2 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
  25. 18: dup_x1
  26. 19: putfield #3 // Field num1:Ljava/lang/Integer;
  27. 22: pop
  28. 23: aload_0
  29. 24: aload_1
  30. 25: invokevirtual #4 // Method java/lang/Integer.intValue:()I
  31. 28: bipush 100
  32. 30: imul
  33. 31: invokestatic #2 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
  34. 34: putfield #5 // Field num2:Ljava/lang/Integer;
  35. 37: aload_0
  36. 38: getfield #5 // Field num2:Ljava/lang/Integer;
  37. 41: invokevirtual #4 // Method java/lang/Integer.intValue:()I
  38. 44: aload_0
  39. 45: getfield #3 // Field num1:Ljava/lang/Integer;
  40. 48: invokevirtual #4 // Method java/lang/Integer.intValue:()I
  41. 51: iadd
  42. 52: invokestatic #2 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
  43. 55: areturn
  44. public static void main(java.lang.String[]);
  45. Code:
  46. 0: new #6 // class Hello
  47. 3: dup
  48. 4: invokespecial #7 // Method "<init>":()V
  49. 7: astore_1
  50. 8: getstatic #8 // Field java/lang/System.out:Ljava/io/PrintStream;
  51. 11: aload_1
  52. 12: bipush 20
  53. 14: invokestatic #2 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
  54. 17: invokevirtual #9 // Method getNum:(Ljava/lang/Integer;)Ljava/lang/Integer;
  55. 20: invokevirtual #10 // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
  56. 23: return
  57. }

2、分析汇编代码

先看看里面方法大概有哪些

  1. public class Hello {
  2. public Hello(); // 构造方法
  3. Code:
  4. ......
  5. public java.lang.Integer getNum(java.lang.Integer);
  6. Code:
  7. ......
  8. public static void main(java.lang.String[]); // 主方法
  9. Code:
  10. ......
  11. }

看看构造方法的代码内容

  1. public Hello();
  2. Code:
  3. 0: aload_0 // 加载索引为0的变量的值
  4. 1: invokespecial #1
  5. 4: aload_0
  6. 5: iconst_0 //将常量0,压入到操作数栈
  7. 6: invokestatic #2
  8. 9: putfield #3
  9. 12: return

发表评论

表情:
评论列表 (有 0 条评论,133人围观)

还没有评论,来说两句吧...

相关阅读

    相关 C基础汇编

    switch switch性能高于if语句的原因在于在case值较为连续的时候会生成值连续的大表,用switch的参数减去第一个最小的case值,和最大值进行比较,小于等

    相关 汇编-objdump

    windows下完成objdump需要用到:反汇编的目标镜像、镜像生成的本地编译器(.exe),相关指令如下。 > 反汇编命令: > > 1. 编译器路径,例:D:\

    相关 汇编

    从代码到最终可执行文件,要经过预处理、编译、汇编、链接四个过程: 1.预处理:对程序进行简单的处理,比如头文件包含展开 2.编译:汇编语言编译器用汇编语言来翻译文件

    相关 汇编工具

    最近上网络编程这门课,孙老师给我们介绍了下反汇编相关工具,让我对反汇编有了一个基本的认识,算是增长见识了。大概介绍了三个工具: 1.source insight 此工具为查