• 逆向-破零64位版本


     

     

    // 排版有点乱,没有图片直观。

    #include
    #include
    #include

    int f_14a2(int *va, int vb)
    {
        /*14a2:    f3 0f 1e fa              endbr64
        14a6:    55                       push   %rbp
        14a7:    48 89 e5                 mov    %rsp,%rbp
        14aa:    48 89 7d e8              mov    %rdi,-0x18(%rbp) va
        14ae:    89 75 e4                 mov    %esi,-0x1c(%rbp)    vb */
        //14b1:    c7 45 fc 00 00 00 00     movl   $0x0,-0x4(%rbp)
            int i = 0;

        //14b8:    c7 45 f8 00 00 00 00     movl   $0x0,-0x8(%rbp)
            int j = 0;

        /*14bf:    eb 1d                    jmp    14de
        14c1:    8b 45 f8                 mov    -0x8(%rbp),%eax    // eax = i
        14c4:    48 98                    cltq   
        14c6:    48 8d 14 85 00 00 00     lea    0x0(,%rax,4),%rdx    // rdx = i + 4 + 0x0
        14cd:    00
        14ce:    48 8b 45 e8              mov    -0x18(%rbp),%rax        // va
        14d2:    48 01 d0                 add    %rdx,%rax            // rax = va + i + 4
        14d5:    8b 00                    mov    (%rax),%eax            // eax = va[i]
        14d7:    01 45 fc                 add    %eax,-0x4(%rbp)        // j = j + va[i]
        14da:    83 45 f8 01              addl   $0x1,-0x8(%rbp)        // i++
        14de:    8b 45 f8                 mov    -0x8(%rbp),%eax
        14e1:    3b 45 e4                 cmp    -0x1c(%rbp),%eax
        14e4:    7c db                    jl     14c1 */

        for (i = 0; i < vb; i++) {
            j += va[i];
        }

        /*14e6:    8b 45 fc                 mov    -0x4(%rbp),%eax
        14e9:    5d                       pop    %rbp
        14ea:    c3                       retq   */

        return j;
    }

    int f_14eb(int (*va)[4], int vb)
    {
        /*14eb:    f3 0f 1e fa              endbr64
        14ef:    55                       push   %rbp
        14f0:    48 89 e5                 mov    %rsp,%rbp
        14f3:    48 89 7d e8              mov    %rdi,-0x18(%rbp)        // va
        14f7:    89 75 e4                 mov    %esi,-0x1c(%rbp)*/    // vb
        //14fa:    c7 45 fc 00 00 00 00     movl   $0x0,-0x4(%rbp)
            int i = 0;

        //1501:    c7 45 f4 00 00 00 00     movl   $0x0,-0xc(%rbp)
            int j = 0;
            int k;

        /*1508:    eb 35                    jmp    153f
        150a:    c7 45 f8 00 00 00 00     movl   $0x0,-0x8(%rbp)            // k = 0
        1511:    eb 22                    jmp    1535
        1513:    8b 45 f4                 mov    -0xc(%rbp),%eax            // eax = i
        1516:    48 98                    cltq   
        1518:    48 c1 e0 04              shl    $0x4,%rax            // rax = i << 4
        151c:    48 89 c2                 mov    %rax,%rdx            // rdx = i << 4
        151f:    48 8b 45 e8              mov    -0x18(%rbp),%rax        // rax = va
        1523:    48 01 c2                 add    %rax,%rdx            // rdx = va + i << 4
        1526:    8b 45 f8                 mov    -0x8(%rbp),%eax        // eax = j
        1529:    48 98                    cltq   
        152b:    8b 04 82                 mov    (%rdx,%rax,4),%eax    // eax = rdx + i * 4
        152e:    01 45 fc                 add    %eax,-0x4(%rbp)        // j = j+(rdx+i*4)
        1531:    83 45 f8 01              addl   $0x1,-0x8(%rbp)        // k++
        1535:    83 7d f8 03              cmpl   $0x3,-0x8(%rbp)        // k < 4
        1539:    7e d8                    jle    1513
        153b:    83 45 f4 01              addl   $0x1,-0xc(%rbp)        // i++
        153f:    8b 45 f4                 mov    -0xc(%rbp),%eax        // eax = i
        1542:    3b 45 e4                 cmp    -0x1c(%rbp),%eax
        1545:    7c c3                    jl     150a */

        for (i = 0; i < vb; i++) {
            for (k = 0; k < 4; k++) {
                j = va[i][k];
            }
        }

        /*1547:    8b 45 fc                 mov    -0x4(%rbp),%eax
        154a:    5d                       pop    %rbp
        154b:    c3                       retq   */

        return j;

    }

    int f_1372()
    {
        /*1372:    f3 0f 1e fa              endbr64
        1376:    55                       push   %rbp
        1377:    48 89 e5                 mov    %rsp,%rbp
        137a:    48 83 c4 80              add    $0xffffffffffffff80,%rsp
        137e:    64 48 8b 04 25 28 00     mov    %fs:0x28,%rax
        1385:    00 00
        1387:    48 89 45 f8              mov    %rax,-0x8(%rbp)
        138b:    31 c0                    xor    %eax,%eax*/
        //138d:    c7 45 a8 0a 00 00 00     movl   $0xa,-0x58(%rbp)
        //1394:    c7 45 ac 14 00 00 00     movl   $0x14,-0x54(%rbp)
        int a[2] = {10, 20};

        //139b:    48 8d 45 a8              lea    -0x58(%rbp),%rax
        //139f:    48 89 45 98              mov    %rax,-0x68(%rbp)
        int *p1 = a;

        /*13a3:    c7 45 d0 01 00 00 00     movl   $0x1,-0x30(%rbp)
        13aa:    c7 45 d4 02 00 00 00     movl   $0x2,-0x2c(%rbp)
        13b1:    c7 45 d8 03 00 00 00     movl   $0x3,-0x28(%rbp)
        13b8:    c7 45 dc f7 ff ff ff     movl   $0xfffffff7,-0x24(%rbp)
        13bf:    c7 45 e0 04 00 00 00     movl   $0x4,-0x20(%rbp)
        13c6:    c7 45 e4 05 00 00 00     movl   $0x5,-0x1c(%rbp)
        13cd:    c7 45 e8 06 00 00 00     movl   $0x6,-0x18(%rbp)
        13d4:    c7 45 ec f8 ff ff ff     movl   $0xfffffff8,-0x14(%rbp)*/
        int b[2][4] = {{1, 2, 3, -9}, {4, 5, 6, -8}};

        //13db:    48 8d 45 d0              lea    -0x30(%rbp),%rax
        //13df:    48 89 45 a0              mov    %rax,-0x60(%rbp)
        int (*p2)[4] = b;

        /*13e3:    48 8b 45 98              mov    -0x68(%rbp),%rax
        13e7:    be 02 00 00 00           mov    $0x2,%esi
        13ec:    48 89 c7                 mov    %rax,%rdi
        13ef:    e8 ae 00 00 00           callq  14a2
        13f4:    89 45 8c                 mov    %eax,-0x74(%rbp)*/
        int ret1 = f_14a2(p1, 2);

        /*13f7:    48 8b 45 a0              mov    -0x60(%rbp),%rax
        13fb:    be 02 00 00 00           mov    $0x2,%esi
        1400:    48 89 c7                 mov    %rax,%rdi
        1403:    e8 e3 00 00 00           callq  14eb
        1408:    89 45 90                 mov    %eax,-0x70(%rbp)*/
        int ret2 = f_14eb(p2, 2);

        /*140b:    c7 45 b0 04 00 00 00     movl   $0x4,-0x50(%rbp)
        1412:    c7 45 b4 04 00 00 00     movl   $0x4,-0x4c(%rbp)
        1419:    c7 45 b8 04 00 00 00     movl   $0x4,-0x48(%rbp)
        1420:    c7 45 bc 05 00 00 00     movl   $0x5,-0x44(%rbp)
        1427:    c7 45 c0 05 00 00 00     movl   $0x5,-0x40(%rbp)
        142e:    c7 45 c4 05 00 00 00     movl   $0x5,-0x3c(%rbp)*/
        int c[6] = {4, 4, 4, 5, 5, 5};

        /*1435:    48 8d 45 b0              lea    -0x50(%rbp),%rax
        1439:    be 06 00 00 00           mov    $0x6,%esi
        143e:    48 89 c7                 mov    %rax,%rdi
        1441:    e8 5c 00 00 00           callq  14a2
        1446:    89 45 94                 mov    %eax,-0x6c(%rbp)*/
        int ret3 = f_14a2(c, 6);

        /*1449:    8b 45 8c                 mov    -0x74(%rbp),%eax
        144c:    89 c6                    mov    %eax,%esi
        144e:    48 8d 3d af 0b 00 00     lea    0xbaf(%rip),%rdi        # 2004
        1455:    b8 00 00 00 00           mov    $0x0,%eax
        145a:    e8 11 fc ff ff           callq  1070 */
        printf("ret1 = %d\n", ret1);

        /*145f:    8b 45 90                 mov    -0x70(%rbp),%eax
        1462:    89 c6                    mov    %eax,%esi
        1464:    48 8d 3d a6 0b 00 00     lea    0xba6(%rip),%rdi        # 2011
        146b:    b8 00 00 00 00           mov    $0x0,%eax
        1470:    e8 fb fb ff ff           callq  1070 */
        printf("ret2 = %d\n", ret2);

        /*1475:    8b 45 94                 mov    -0x6c(%rbp),%eax
        1478:    89 c6                    mov    %eax,%esi
        147a:    48 8d 3d 9d 0b 00 00     lea    0xb9d(%rip),%rdi        # 201e
        1481:    b8 00 00 00 00           mov    $0x0,%eax
        1486:    e8 e5 fb ff ff           callq  1070 */
        printf("ret3 = %d\n", ret3);

        /*148b:    90                       nop
        148c:    48 8b 55 f8              mov    -0x8(%rbp),%rdx
        1490:    64 48 33 14 25 28 00     xor    %fs:0x28,%rdx
        1497:    00 00
        1499:    74 05                    je     14a0
        149b:    e8 c0 fb ff ff           callq  1060 <__stack_chk_fail@plt>
        14a0:    c9                       leaveq
        14a1:    c3                       retq   */

        return 0;
    }

    int f_154c(){ return 0; }
    int f_1169(){ return 0; }
    int f_127a(){ return 0; }
    int f_12ac(){ return 0; }
    int f_1308(){ return 0; }
    int f_16d2(){ return 0; }
    int f_18c2(){ return 0; }

    int main()
    {
        f_1372();
        f_154c();
        f_1169();
        f_127a();
        f_12ac();
        f_1308();
        f_16d2();
        f_18c2();

        return 0;
    }

  • 相关阅读:
    多线程&JUC
    Pycharm+服务器运行代码
    Java虚拟机(JVM)面试专题(初级程序员P6)
    C++ ,VCPKG那些事
    opencv实现仿射变换和透射变换
    Leetcode 1584. 连接所有点的最小费用(手撸普利姆算法)
    [随手记]selector是如何生效的
    Linux系统编程学习 NO.5 ——shell命令行的概念以及原理、权限的概念
    微信小程序开发实战7 小程序订阅消息
    MySQL 如何添加索引
  • 原文地址:https://blog.csdn.net/xiaozhiwise/article/details/127863472