逆向-还原代码之运算符++ (Interl 64)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
int array[33] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
                 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
                 31, 32};
 
int main_add()
{
    /*1149:    f3 0f 1e fa              endbr64  
    114d:    55                       push   %rbp
    114e:    48 89 e5                 mov    %rsp,%rbp
    1151:    48 83 ec 10              sub    $0x10,%rsp
    1155:    c7 45 fc 00 00 00 00     movl   $0x0,-0x4(%rbp)
    115c:    c7 45 f8 00 00 00 00     movl   $0x0,-0x8(%rbp)*/
    int j = 0;
    int i = 0;
 
    //1163:    e9 b5 00 00 00           jmpq   121d <main_add+0xd4>
    for (i = 0; i <= 10; i++) {
 
     //1168:    83 45 fc 01              addl   $0x1,-0x4(%rbp)
        j++;
 
    /*116c:    8b 45 fc                 mov    -0x4(%rbp),%eax    // eax = 1
    116f:    83 e8 01                 sub    $0x1,%eax        // eax = 0
    1172:    48 98                    cltq    
    1174:    48 8d 14 85 00 00 00     lea    0x0(,%rax,4),%rdx    // rdx = 0*4+0 = 0
    117b:    00  
    117c:    48 8d 05 9d 2e 00 00     lea    0x2e9d(%rip),%rax        # 4020 <array>
    1183:    8b 14 02                 mov    (%rdx,%rax,1),%edx    // edx = 0+a*1 = a[0]
    1186:    8b 45 fc                 mov    -0x4(%rbp),%eax        // eax = 1
    1189:    89 d1                    mov    %edx,%ecx            // ecx = a
    118b:    89 c2                    mov    %eax,%edx            // edx = 1
    118d:    be 10 00 00 00           mov    $0x10,%esi            // esi = 0x10
    1192:    48 8d 3d 6f 0e 00 00     lea    0xe6f(%rip),%rdi        # 2008 <_IO_stdin_used+0x8>
    1199:    b8 00 00 00 00           mov    $0x0,%eax
    119e:    e8 ad fe ff ff           callq  1050 <printf@plt>*/    
        printf("%d %d %d\n", 0x10, j, array[j-1]);
 
    //11a3:    83 45 fc 01              addl   $0x1,-0x4(%rbp)    // (rbp-0x4) = 1+1 = 2
        j++;
 
    /*11a7:    8b 45 fc                 mov    -0x4(%rbp),%eax    // eax = 2
    11aa:    83 e8 01                 sub    $0x1,%eax        // eax = 1
    11ad:    48 98                    cltq    
    11af:    48 8d 14 85 00 00 00     lea    0x0(,%rax,4),%rdx    //rdx = 1*4+0 = 4
    11b6:    00  
    11b7:    48 8d 05 62 2e 00 00     lea    0x2e62(%rip),%rax        # 4020 <array>
    11be:    8b 14 02                 mov    (%rdx,%rax,1),%edx    // edx = 4+array*1 = array[1]
    11c1:    8b 45 fc                 mov    -0x4(%rbp),%eax        // eax = 2
    11c4:    89 d1                    mov    %edx,%ecx            // ecx = array[4];
    11c6:    89 c2                    mov    %eax,%edx            // edx = 2
    11c8:    be 12 00 00 00           mov    $0x12,%esi            // esi = 0x12
    11cd:    48 8d 3d 34 0e 00 00     lea    0xe34(%rip),%rdi        # 2008 <_IO_stdin_used+0x8>
    11d4:    b8 00 00 00 00           mov    $0x0,%eax
    11d9:    e8 72 fe ff ff           callq  1050 <printf@plt>*/
        printf("%d %d %d\n", 0x12, j, array[j-1]);
 
    //11de:    83 45 fc 01              addl   $0x1,-0x4(%rbp)
        j++;
 
    /*11e2:    8b 45 fc                 mov    -0x4(%rbp),%eax    // eax = 3
    11e5:    83 e8 01                 sub    $0x1,%eax        // eax = 2
    11e8:    48 98                    cltq    
    11ea:    48 8d 14 85 00 00 00     lea    0x0(,%rax,4),%rdx    // rdx = 2*4 = 8
    11f1:    00  
    11f2:    48 8d 05 27 2e 00 00     lea    0x2e27(%rip),%rax        # 4020 <array>
    11f9:    8b 14 02                 mov    (%rdx,%rax,1),%edx    // edx = 8+array = array[2]
    11fc:    8b 45 fc                 mov    -0x4(%rbp),%eax
    11ff:    89 d1                    mov    %edx,%ecx
    1201:    89 c2                    mov    %eax,%edx
    1203:    be 14 00 00 00           mov    $0x14,%esi
    1208:    48 8d 3d f9 0d 00 00     lea    0xdf9(%rip),%rdi        # 2008 <_IO_stdin_used+0x8>
    120f:    b8 00 00 00 00           mov    $0x0,%eax
    1214:    e8 37 fe ff ff           callq  1050 <printf@plt>*/
        printf("%d %d %d\n", 0x14, j, array[j-1]);
 
    /*1219:    83 45 f8 01              addl   $0x1,-0x8(%rbp)
    121d:    83 7d f8 0a              cmpl   $0xa,-0x8(%rbp)
    1221:    0f 8e 41 ff ff ff        jle    1168 <main_add+0x1f>*/
    
    }
 
    /*1227:    b8 00 00 00 00           mov    $0x0,%eax
    122c:    c9                       leaveq  
    122d:    c3                       retq   */
 
    return 0;
}
 
int add_main()
{
    /*122e:    f3 0f 1e fa              endbr64  
    1232:    55                       push   %rbp
    1233:    48 89 e5                 mov    %rsp,%rbp
    1236:    48 83 ec 10              sub    $0x10,%rsp
    123a:    c7 45 fc 00 00 00 00     movl   $0x0,-0x4(%rbp)
    1241:    c7 45 f8 00 00 00 00     movl   $0x0,-0x8(%rbp) */
        int j = 0;
        int i = 0;
 
        for (i = 0; i <= 10; i++) {
    //1248:    e9 b5 00 00 00           jmpq   1302 <add_main+0xd4>
    //124d:    83 45 fc 01              addl   $0x1,-0x4(%rbp)
        ++j;
 
    /*1251:    8b 45 fc                 mov    -0x4(%rbp),%eax
    1254:    83 e8 01                 sub    $0x1,%eax
    1257:    48 98                    cltq    
    1259:    48 8d 14 85 00 00 00     lea    0x0(,%rax,4),%rdx
    1260:    00  
    1261:    48 8d 05 b8 2d 00 00     lea    0x2db8(%rip),%rax        # 4020 <array>
    1268:    8b 14 02                 mov    (%rdx,%rax,1),%edx
    126b:    8b 45 fc                 mov    -0x4(%rbp),%eax
    126e:    89 d1                    mov    %edx,%ecx
    1270:    89 c2                    mov    %eax,%edx
    1272:    be 46 00 00 00           mov    $0x46,%esi
    1277:    48 8d 3d 8a 0d 00 00     lea    0xd8a(%rip),%rdi        # 2008 <_IO_stdin_used+0x8>
    127e:    b8 00 00 00 00           mov    $0x0,%eax
    1283:    e8 c8 fd ff ff           callq  1050 <printf@plt>*/
        printf(" %d %d %d\n", 0x46, j, array[j-1]);
 
    //1288:    83 45 fc 01              addl   $0x1,-0x4(%rbp)
        ++j;
 
    /*128c:    8b 45 fc                 mov    -0x4(%rbp),%eax
    128f:    83 e8 01                 sub    $0x1,%eax
    1292:    48 98                    cltq    
    1294:    48 8d 14 85 00 00 00     lea    0x0(,%rax,4),%rdx
    129b:    00  
    129c:    48 8d 05 7d 2d 00 00     lea    0x2d7d(%rip),%rax        # 4020 <array>
    12a3:    8b 14 02                 mov    (%rdx,%rax,1),%edx
    12a6:    8b 45 fc                 mov    -0x4(%rbp),%eax
    12a9:    89 d1                    mov    %edx,%ecx
    12ab:    89 c2                    mov    %eax,%edx
    12ad:    be 48 00 00 00           mov    $0x48,%esi
    12b2:    48 8d 3d 4f 0d 00 00     lea    0xd4f(%rip),%rdi        # 2008 <_IO_stdin_used+0x8>
    12b9:    b8 00 00 00 00           mov    $0x0,%eax
    12be:    e8 8d fd ff ff           callq  1050 <printf@plt> */
        printf(" %d %d %d\n", 0x48, j, array[j-1]);
 
    //12c3:    83 45 fc 01              addl   $0x1,-0x4(%rbp)
        ++j;
 
    /*12c7:    8b 45 fc                 mov    -0x4(%rbp),%eax
    12ca:    83 e8 01                 sub    $0x1,%eax
    12cd:    48 98                    cltq    
    12cf:    48 8d 14 85 00 00 00     lea    0x0(,%rax,4),%rdx
    12d6:    00  
    12d7:    48 8d 05 42 2d 00 00     lea    0x2d42(%rip),%rax        # 4020 <array>
    12de:    8b 14 02                 mov    (%rdx,%rax,1),%edx
    12e1:    8b 45 fc                 mov    -0x4(%rbp),%eax
    12e4:    89 d1                    mov    %edx,%ecx
    12e6:    89 c2                    mov    %eax,%edx
    12e8:    be 4a 00 00 00           mov    $0x4a,%esi
    12ed:    48 8d 3d 14 0d 00 00     lea    0xd14(%rip),%rdi        # 2008 <_IO_stdin_used+0x8>
    12f4:    b8 00 00 00 00           mov    $0x0,%eax
    12f9:    e8 52 fd ff ff           callq  1050 <printf@plt>*/
        printf(" %d %d %d\n", 0x4a, j, array[j-1]);
    }
 
    /*12fe:    83 45 f8 01              addl   $0x1,-0x8(%rbp)
    1302:    83 7d f8 0a              cmpl   $0xa,-0x8(%rbp)
    1306:    0f 8e 41 ff ff ff        jle    124d <add_main+0x1f>
    130c:    b8 00 00 00 00           mov    $0x0,%eax
    1311:    c9                       leaveq  
    1312:    c3                       retq   */
    
    return 0;
}
 
int array_main()
{
    /*1313:    f3 0f 1e fa              endbr64  
    1317:    55                       push   %rbp
    1318:    48 89 e5                 mov    %rsp,%rbp
    131b:    48 83 ec 10              sub    $0x10,%rsp
    131f:    c7 45 fc 00 00 00 00     movl   $0x0,-0x4(%rbp)
    1326:    c7 45 f8 00 00 00 00     movl   $0x0,-0x8(%rbp)*/
        int j = 0;
        int i = 0;
 
    //132d:    e9 b2 00 00 00           jmpq   13e4 <array_main+0xd1>
        for (i = 0; i <= 10; i++) {
 
    /*1332:    8b 45 fc                 mov    -0x4(%rbp),%eax    // eax = j = 0
    1335:    8d 50 01                 lea    0x1(%rax),%edx    // edx = 0 + 1
    1338:    89 55 fc                 mov    %edx,-0x4(%rbp)    // (rbp-0x4) = 1
    133b:    48 98                    cltq    
    133d:    48 8d 14 85 00 00 00     lea    0x0(,%rax,4),%rdx    // rdx = 0*4 = 0
    1344:    00  
    1345:    48 8d 05 d4 2c 00 00     lea    0x2cd4(%rip),%rax        # 4020 <array>
    134c:    8b 14 02                 mov    (%rdx,%rax,1),%edx    // edx = (0x0+array*1) = array[0])
    134f:    8b 45 fc                 mov    -0x4(%rbp),%eax        // eax = 1
    1352:    89 d1                    mov    %edx,%ecx            // ecx = array[0]
    1354:    89 c2                    mov    %eax,%edx            // edx = 1
    1356:    be 7b 00 00 00           mov    $0x7b,%esi            // esi
    135b:    48 8d 3d a6 0c 00 00     lea    0xca6(%rip),%rdi        # 2008 <_IO_stdin_used+0x8>
    1362:    b8 00 00 00 00           mov    $0x0,%eax
    1367:    e8 e4 fc ff ff           callq  1050 <printf@plt>*/
            printf("%d %d %d\n", 0x7b, j, array[j++]);
 
    /*136c:    8b 45 fc                 mov    -0x4(%rbp),%eax    // eax = 1
    136f:    8d 50 01                 lea    0x1(%rax),%edx    // edx = 1 + 1 = 2
    1372:    89 55 fc                 mov    %edx,-0x4(%rbp)    // (rbp-0x4) = 2
    1375:    48 98                    cltq    
    1377:    48 8d 14 85 00 00 00     lea    0x0(,%rax,4),%rdx    // rdx = 1*4 = 4
    137e:    00  
    137f:    48 8d 05 9a 2c 00 00     lea    0x2c9a(%rip),%rax        # 4020 <array>
    1386:    8b 14 02                 mov    (%rdx,%rax,1),%edx    // edx = 4+array = array[1]
    1389:    8b 45 fc                 mov    -0x4(%rbp),%eax        // eax = 2
    138c:    89 d1                    mov    %edx,%ecx
    138e:    89 c2                    mov    %eax,%edx
    1390:    be 7c 00 00 00           mov    $0x7c,%esi
    1395:    48 8d 3d 6c 0c 00 00     lea    0xc6c(%rip),%rdi        # 2008 <_IO_stdin_used+0x8>
    139c:    b8 00 00 00 00           mov    $0x0,%eax
    13a1:    e8 aa fc ff ff           callq  1050 <printf@plt> */
            printf("%d %d %d\n", 0x7c, j, array[j++]);
 
    /*13a6:    8b 45 fc                 mov    -0x4(%rbp),%eax
    13a9:    8d 50 01                 lea    0x1(%rax),%edx
    13ac:    89 55 fc                 mov    %edx,-0x4(%rbp)
    13af:    48 98                    cltq    
    13b1:    48 8d 14 85 00 00 00     lea    0x0(,%rax,4),%rdx
    13b8:    00  
    13b9:    48 8d 05 60 2c 00 00     lea    0x2c60(%rip),%rax        # 4020 <array>
    13c0:    8b 14 02                 mov    (%rdx,%rax,1),%edx
    13c3:    8b 45 fc                 mov    -0x4(%rbp),%eax
    13c6:    89 d1                    mov    %edx,%ecx
    13c8:    89 c2                    mov    %eax,%edx
    13ca:    be 7d 00 00 00           mov    $0x7d,%esi
    13cf:    48 8d 3d 32 0c 00 00     lea    0xc32(%rip),%rdi        # 2008 <_IO_stdin_used+0x8>
    13d6:    b8 00 00 00 00           mov    $0x0,%eax
    13db:    e8 70 fc ff ff           callq  1050 <printf@plt>*/
            printf("%d %d %d\n", 0x7d, j, array[j++]);
 
    /*13e0:    83 45 f8 01              addl   $0x1,-0x8(%rbp)
    13e4:    83 7d f8 0a              cmpl   $0xa,-0x8(%rbp)
    13e8:    0f 8e 44 ff ff ff        jle    1332 <array_main+0x1f>*/
    }
 
    //13ee:    c7 45 fc 00 00 00 00     movl   $0x0,-0x4(%rbp)
    //13f5:    c7 45 f8 00 00 00 00     movl   $0x0,-0x8(%rbp)
        j = 0;
        i = 0;
 
    //13fc:    e9 a3 00 00 00           jmpq   14a4 <array_main+0x191>
    for (i = 0; i <= 10; i++) {
 
    /*1401:    8b 45 fc                 mov    -0x4(%rbp),%eax    // eax = j = 0
    1404:    8d 50 01                 lea    0x1(%rax),%edx    // edx = 1
    1407:    89 55 fc                 mov    %edx,-0x4(%rbp)    // (rbp-0x4) = 1
    140a:    48 98                    cltq    
    140c:    48 8d 14 85 00 00 00     lea    0x0(,%rax,4),%rdx    // rdx = 0*4 = 0
    1413:    00  
    1414:    48 8d 05 05 2c 00 00     lea    0x2c05(%rip),%rax        # 4020 <array>
    141b:    8b 04 02                 mov    (%rdx,%rax,1),%eax    // eax = (0+array*1) = array[0]
    141e:    89 c2                    mov    %eax,%edx        // edx = array[0]
    1420:    be 83 00 00 00           mov    $0x83,%esi        // esi = 0x83
    1425:    48 8d 3d ff 0b 00 00     lea    0xbff(%rip),%rdi        # 202b <_IO_stdin_used+0x2b>
    142c:    b8 00 00 00 00           mov    $0x0,%eax
    1431:    e8 1a fc ff ff           callq  1050 <printf@plt>*/
        printf("%d %d\n", 0x83, array[j++]);
 
    /*1436:    8b 45 fc                 mov    -0x4(%rbp),%eax
    1439:    8d 50 01                 lea    0x1(%rax),%edx
    143c:    89 55 fc                 mov    %edx,-0x4(%rbp)
    143f:    48 98                    cltq    
    1441:    48 8d 14 85 00 00 00     lea    0x0(,%rax,4),%rdx
    1448:    00  
    1449:    48 8d 05 d0 2b 00 00     lea    0x2bd0(%rip),%rax        # 4020 <array>
    1450:    8b 04 02                 mov    (%rdx,%rax,1),%eax
    1453:    89 c2                    mov    %eax,%edx
    1455:    be 84 00 00 00           mov    $0x84,%esi
    145a:    48 8d 3d ca 0b 00 00     lea    0xbca(%rip),%rdi        # 202b <_IO_stdin_used+0x2b>
    1461:    b8 00 00 00 00           mov    $0x0,%eax
    1466:    e8 e5 fb ff ff           callq  1050 <printf@plt>*/
        printf("%d %d\n", 0x84, array[j++]);
 
    /*146b:    8b 45 fc                 mov    -0x4(%rbp),%eax
    146e:    8d 50 01                 lea    0x1(%rax),%edx
    1471:    89 55 fc                 mov    %edx,-0x4(%rbp)
    1474:    48 98                    cltq    
    1476:    48 8d 14 85 00 00 00     lea    0x0(,%rax,4),%rdx
    147d:    00  
    147e:    48 8d 05 9b 2b 00 00     lea    0x2b9b(%rip),%rax        # 4020 <array>
    1485:    8b 04 02                 mov    (%rdx,%rax,1),%eax
    1488:    89 c2                    mov    %eax,%edx
    148a:    be 85 00 00 00           mov    $0x85,%esi
    148f:    48 8d 3d 95 0b 00 00     lea    0xb95(%rip),%rdi        # 202b <_IO_stdin_used+0x2b>
    1496:    b8 00 00 00 00           mov    $0x0,%eax
    149b:    e8 b0 fb ff ff           callq  1050 <printf@plt>*/
        printf("%d %d\n", 0x85, array[j++]);
 
    /*14a0:    83 45 f8 01              addl   $0x1,-0x8(%rbp)
    14a4:    83 7d f8 0a              cmpl   $0xa,-0x8(%rbp)
    14a8:    0f 8e 53 ff ff ff        jle    1401 <array_main+0xee>*/
    }
 
    /*14ae:    b8 00 00 00 00           mov    $0x0,%eax
    14b3:    c9                       leaveq  
    14b4:    c3                       retq   */
 
    return 0;
}
 
int main()
{
    /*14b5:    f3 0f 1e fa              endbr64  
    14b9:    55                       push   %rbp
    14ba:    48 89 e5                 mov    %rsp,%rbp
    14bd:    b8 00 00 00 00           mov    $0x0,%eax
    14c2:    e8 4c fe ff ff           callq  1313 <array_main>*/
    array_main();
 
    /*14c7:    b8 00 00 00 00           mov    $0x0,%eax
    14cc:    5d                       pop    %rbp
    14cd:    c3                       retq    
    14ce:    66 90                    xchg   %ax,%ax*/
    
    return 0;
}

// code
#include <stdio.h>
 
int array[33] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
                 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
                 31, 32};
 
int main_add()
{
    int i, j, suffix;
 
    suffix = 0;
 
    for (i = 0; i < 11; i++)
        /*for (j = 0; j < 3; j++)*/ {
            suffix++;
            printf("\tline = %d suffix = %d array = %d\n", __LINE__, suffix, array[suffix-1]);
            suffix++;
            printf("\tline = %d suffix = %d array = %d\n", __LINE__, suffix, array[suffix-1]);
            suffix++;
            printf("\tline = %d suffix = %d array = %d\n", __LINE__, suffix, array[suffix-1]);
        }
 
    return 0;
}
 
int add_main()
{
    int i, j, suffix;
 
    suffix = 0;
 
    for (i = 0; i < 11; i++)
        /*for (j = 0; j < 3; j++)*/ {
            ++suffix;
            printf("\tline = %d suffix = %d array = %d\n", __LINE__, suffix, array[suffix-1]);
            ++suffix;
            printf("\tline = %d suffix = %d array = %d\n", __LINE__, suffix, array[suffix-1]);
            ++suffix;
            printf("\tline = %d suffix = %d array = %d\n", __LINE__, suffix, array[suffix-1]);
        }
 
    return 0;
}
 
int array_main()
{
    int i, j, suffix;
 
    suffix = 0;
 
    for (i = 0; i < 11; i++)
        /*for (j = 0; j < 3; j++)*/ {
            printf("\tline = %d suffix = %d array = %d\n", __LINE__, suffix, array[suffix++]);
            printf("\tline = %d suffix = %d array = %d\n", __LINE__, suffix, array[suffix++]);
            printf("\tline = %d suffix = %d array = %d\n", __LINE__, suffix, array[suffix++]);
        }
 
    suffix = 0;
    for (i = 0; i < 11; i++)
        /*for (j = 0; j < 3; j++)*/ {
            printf("\tline = %d array = %d\n", __LINE__,  array[suffix++]);
            printf("\tline = %d array = %d\n", __LINE__,  array[suffix++]);
            printf("\tline = %d array = %d\n", __LINE__,  array[suffix++]);
        }
 
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值