| 
 | 
 
 
发表于 2021-5-24 23:03:12
|
显示全部楼层
 
 
 
直接反编译gcc生成的可执行文件 
- #include <stdio.h>
 
  
- size_t count = 0;
 
 - void hanoi(size_t n, char a, char b, char c) {
 
 -     if(n == 1) {
 
 -         printf("%2lu: %c -> %c\n", ++count, a, c);
 
 -     } else  {
 
 -         hanoi(n - 1, a, c, b);
 
 -         printf("%2lu: %c -> %c\n", ++count, a, c);
 
 -         hanoi(n - 1, b, a, c);
 
 -     }
 
 - }
 
  
- int main(void) {
 
 -     hanoi(4, 'a', 'b', 'c');
 
 -     return 0;
 
 - }
 
 
  复制代码 
- size_t count = 0;
 
 - void hanoi(size_t n, char a, char b, char c) {
 
 -  794:        a9be7bfd         stp        x29, x30, [sp, #-32]!
 
 -  798:        910003fd         mov        x29, sp
 
 -  79c:        f9000fe0         str        x0, [sp, #24]
 
 -  7a0:        39005fe1         strb        w1, [sp, #23]
 
 -  7a4:        39005be2         strb        w2, [sp, #22]
 
 -  7a8:        390057e3         strb        w3, [sp, #21]
 
 -     if(n == 1) {
 
 -  7ac:        f9400fe0         ldr        x0, [sp, #24]
 
 -  7b0:        f100041f         cmp        x0, #0x1
 
 -  7b4:        54000281         b.ne        804 <hanoi+0x70>  // b.any
 
 -         printf("%2lu: %c -> %c\n", ++count, a, c);
 
 -  7b8:        b0000080         adrp        x0, 11000 <__cxa_finalize@GLIBC_2.17>
 
 -  7bc:        91010000         add        x0, x0, #0x40
 
 -  7c0:        f9400000         ldr        x0, [x0]
 
 -  7c4:        91000401         add        x1, x0, #0x1
 
 -  7c8:        b0000080         adrp        x0, 11000 <__cxa_finalize@GLIBC_2.17>
 
 -  7cc:        91010000         add        x0, x0, #0x40
 
 -  7d0:        f9000001         str        x1, [x0]
 
 -  7d4:        b0000080         adrp        x0, 11000 <__cxa_finalize@GLIBC_2.17>
 
 -  7d8:        91010000         add        x0, x0, #0x40
 
 -  7dc:        f9400000         ldr        x0, [x0]
 
 -  7e0:        39405fe1         ldrb        w1, [sp, #23]
 
 -  7e4:        394057e2         ldrb        w2, [sp, #21]
 
 -  7e8:        2a0203e3         mov        w3, w2
 
 -  7ec:        2a0103e2         mov        w2, w1
 
 -  7f0:        aa0003e1         mov        x1, x0
 
 -  7f4:        90000000         adrp        x0, 0 <__abi_tag-0x278>
 
 -  7f8:        91254000         add        x0, x0, #0x950
 
 -  7fc:        97ffff95         bl        650 <printf@plt>
 
 -     } else  {
 
 -         hanoi(n - 1, a, c, b);
 
 -         printf("%2lu: %c -> %c\n", ++count, a, c);
 
 -         hanoi(n - 1, b, a, c);
 
 -     }
 
 - }
 
 -  800:        1400001f         b        87c <hanoi+0xe8>
 
 -         hanoi(n - 1, a, c, b);
 
 -  804:        f9400fe0         ldr        x0, [sp, #24]
 
 -  808:        d1000400         sub        x0, x0, #0x1
 
 -  80c:        39405be3         ldrb        w3, [sp, #22]
 
 -  810:        394057e2         ldrb        w2, [sp, #21]
 
 -  814:        39405fe1         ldrb        w1, [sp, #23]
 
 -  818:        97ffffdf         bl        794 <hanoi>
 
 -         printf("%2lu: %c -> %c\n", ++count, a, c);
 
 -  81c:        b0000080         adrp        x0, 11000 <__cxa_finalize@GLIBC_2.17>
 
 -  820:        91010000         add        x0, x0, #0x40
 
 -  824:        f9400000         ldr        x0, [x0]
 
 -  828:        91000401         add        x1, x0, #0x1
 
 -  82c:        b0000080         adrp        x0, 11000 <__cxa_finalize@GLIBC_2.17>
 
 -  830:        91010000         add        x0, x0, #0x40
 
 -  834:        f9000001         str        x1, [x0]
 
 -  838:        b0000080         adrp        x0, 11000 <__cxa_finalize@GLIBC_2.17>
 
 -  83c:        91010000         add        x0, x0, #0x40
 
 -  840:        f9400000         ldr        x0, [x0]
 
 -  844:        39405fe1         ldrb        w1, [sp, #23]
 
 -  848:        394057e2         ldrb        w2, [sp, #21]
 
 -  84c:        2a0203e3         mov        w3, w2
 
 -  850:        2a0103e2         mov        w2, w1
 
 -  854:        aa0003e1         mov        x1, x0
 
 -  858:        90000000         adrp        x0, 0 <__abi_tag-0x278>
 
 -  85c:        91254000         add        x0, x0, #0x950
 
 -  860:        97ffff7c         bl        650 <printf@plt>
 
 -         hanoi(n - 1, b, a, c);
 
 -  864:        f9400fe0         ldr        x0, [sp, #24]
 
 -  868:        d1000400         sub        x0, x0, #0x1
 
 -  86c:        394057e3         ldrb        w3, [sp, #21]
 
 -  870:        39405fe2         ldrb        w2, [sp, #23]
 
 -  874:        39405be1         ldrb        w1, [sp, #22]
 
 -  878:        97ffffc7         bl        794 <hanoi>
 
 - }
 
 -  87c:        d503201f         nop
 
 -  880:        a8c27bfd         ldp        x29, x30, [sp], #32
 
 -  884:        d65f03c0         ret
 
  
- 0000000000000888 <main>:
 
  
- int main(void) {
 
 -  888:        a9bf7bfd         stp        x29, x30, [sp, #-16]!
 
 -  88c:        910003fd         mov        x29, sp
 
 -     hanoi(4, 'a', 'b', 'c');
 
 -  890:        52800c63         mov        w3, #0x63                          // #99
 
 -  894:        52800c42         mov        w2, #0x62                          // #98
 
 -  898:        52800c21         mov        w1, #0x61                          // #97
 
 -  89c:        d2800080         mov        x0, #0x4                           // #4
 
 -  8a0:        97ffffbd         bl        794 <hanoi>
 
 -     return 0;
 
 -  8a4:        52800000         mov        w0, #0x0                           // #0
 
 - }
 
 -  8a8:        a8c17bfd         ldp        x29, x30, [sp], #16
 
 -  8ac:        d65f03c0         ret
 
  
  复制代码 |   
 
 
 
 |