• 逆向-还原代码之split (Intel 32)


    #include

    void a_1()
    {
     /*80484d0:    55                       push   %ebp
     80484d1:    89 e5                    mov    %esp,%ebp
     80484d3:    57                       push   %edi
     80484d4:    56                       push   %esi
     80484d5:    53                       push   %ebx
     80484d6:    83 ec 4c                 sub    $0x4c,%esp
     80484d9:    c7 45 d4 01 00 00 00     movl   $0x1,-0x2c(%ebp)
     80484e0:    c7 45 d0 02 00 00 00     movl   $0x2,-0x30(%ebp)*/
        int j = 1;
        int i = 2;

     /*80484e7:    c7 45 e4 00 00 00 00     movl   $0x0,-0x1c(%ebp)
     80484ee:    8b 45 e4                 mov    -0x1c(%ebp),%eax
     80484f1:    89 45 e0                 mov    %eax,-0x20(%ebp)
     80484f4:    8b 45 e0                 mov    -0x20(%ebp),%eax
     80484f7:    89 45 dc                 mov    %eax,-0x24(%ebp)
     80484fa:    8b 45 dc                 mov    -0x24(%ebp),%eax
     80484fd:    89 45 d8                 mov    %eax,-0x28(%ebp)*/
        int a[4];
        a[0] = a[1] = a[2] = a[3] = 0;

     /*8048500:    8b 45 d4                 mov    -0x2c(%ebp),%eax
     8048503:    89 44 24 04              mov    %eax,0x4(%esp)
     8048507:    c7 04 24 74 88 04 08     movl   $0x8048874,(%esp)
     804850e:    e8 7d fe ff ff           call   8048390 */
        printf("%d\n", j);

     /*8048513:    8d 45 d4                 lea    -0x2c(%ebp),%eax    // eax = &j
     8048516:    89 44 24 04              mov    %eax,0x4(%esp)    // esp+4 = &j
     804851a:    c7 04 24 74 88 04 08     movl   $0x8048874,(%esp)
     8048521:    e8 6a fe ff ff           call   8048390 */
        printf("%x\n", &j);

     /*8048526:    8b 45 d4                 mov    -0x2c(%ebp),%eax    // eax = j = 2
     8048529:    8d 78 14                 lea    0x14(%eax),%edi    // edi = j+0x14
     804852c:    8b 45 d4                 mov    -0x2c(%ebp),%eax    // eax = j
     804852f:    8d 70 10                 lea    0x10(%eax),%esi    // esi = j+0x10
     8048532:    8b 45 d4                 mov    -0x2c(%ebp),%eax
     8048535:    8d 58 0c                 lea    0xc(%eax),%ebx    // ebx = j+0xc
     8048538:    8b 45 d4                 mov    -0x2c(%ebp),%eax
     804853b:    8d 48 08                 lea    0x8(%eax),%ecx    // ecx = j+0x8
     804853e:    8b 45 d4                 mov    -0x2c(%ebp),%eax
     8048541:    8d 50 04                 lea    0x4(%eax),%edx    // edx = j+4
     8048544:    8b 45 d4                 mov    -0x2c(%ebp),%eax    // eax = j
     8048547:    89 7c 24 18              mov    %edi,0x18(%esp)
     804854b:    89 74 24 14              mov    %esi,0x14(%esp)
     804854f:    89 5c 24 10              mov    %ebx,0x10(%esp)
     8048553:    89 4c 24 0c              mov    %ecx,0xc(%esp)
     8048557:    89 54 24 08              mov    %edx,0x8(%esp)
     804855b:    89 44 24 04              mov    %eax,0x4(%esp)
     804855f:    c7 04 24 7c 88 04 08     movl   $0x804887c,(%esp)
     8048566:    e8 25 fe ff ff           call   8048390 */
        printf("%d %d %d %d %d %d\n", j, j+4, j+8, j+12, j+16, j+20);

     /*804856b:    8b 45 d4                 mov    -0x2c(%ebp),%eax
     804856e:    89 45 d8                 mov    %eax,-0x28(%ebp)*/
        a[0] = j;
     /*8048571:    8b 45 d4                 mov    -0x2c(%ebp),%eax
     8048574:    83 c0 04                 add    $0x4,%eax
     8048577:    89 45 dc                 mov    %eax,-0x24(%ebp)*/
        a[1] = j+4;
     /*804857a:    8b 45 d4                 mov    -0x2c(%ebp),%eax
     804857d:    83 c0 08                 add    $0x8,%eax
     8048580:    89 45 e0                 mov    %eax,-0x20(%ebp)*/
        a[2] = j+8;
     /*8048583:    8b 45 d4                 mov    -0x2c(%ebp),%eax
     8048586:    83 c0 0c                 add    $0xc,%eax
     8048589:    89 45 e4                 mov    %eax,-0x1c(%ebp)*/
        a[3] = j+0xc;
     /*804858c:    8b 45 e4                 mov    -0x1c(%ebp),%eax
     804858f:    89 44 24 10              mov    %eax,0x10(%esp)
     8048593:    8b 45 e0                 mov    -0x20(%ebp),%eax
     8048596:    89 44 24 0c              mov    %eax,0xc(%esp)
     804859a:    8b 45 dc                 mov    -0x24(%ebp),%eax
     804859d:    89 44 24 08              mov    %eax,0x8(%esp)
     80485a1:    8b 45 d8                 mov    -0x28(%ebp),%eax
     80485a4:    89 44 24 04              mov    %eax,0x4(%esp)
     80485a8:    c7 04 24 9b 88 04 08     movl   $0x804889b,(%esp)
     80485af:    e8 dc fd ff ff           call   8048390 */
        printf("%d %d %d %d\n", a[0], a[1], a[2], a[3]);

     /*80485b4:    8d 45 d0                 lea    -0x30(%ebp),%eax
     80485b7:    89 45 d4                 mov    %eax,-0x2c(%ebp)*/
        j = &i;

     /*80485ba:    8d 45 d0                 lea    -0x30(%ebp),%eax
     80485bd:    89 44 24 04              mov    %eax,0x4(%esp)
     80485c1:    c7 04 24 a8 88 04 08     movl   $0x80488a8,(%esp)
     80485c8:    e8 c3 fd ff ff           call   8048390 */
        printf("%x\n", i);

     /*80485cd:    8b 45 d4                 mov    -0x2c(%ebp),%eax
     80485d0:    89 44 24 04              mov    %eax,0x4(%esp)
     80485d4:    c7 04 24 74 88 04 08     movl   $0x8048874,(%esp)
     80485db:    e8 b0 fd ff ff           call   8048390 */
        printf("%x\n", j);

     /*80485e0:    8b 45 d4                 mov    -0x2c(%ebp),%eax
     80485e3:    8b 00                    mov    (%eax),%eax
     80485e5:    89 44 24 04              mov    %eax,0x4(%esp)
     80485e9:    c7 04 24 74 88 04 08     movl   $0x8048874,(%esp)
     80485f0:    e8 9b fd ff ff           call   8048390 */
        printf("%d\n", *(int*)j);

     /*80485f5:    83 c4 4c                 add    $0x4c,%esp
     80485f8:    5b                       pop    %ebx
     80485f9:    5e                       pop    %esi
     80485fa:    5f                       pop    %edi
     80485fb:    5d                       pop    %ebp
     80485fc:    c3                       ret  */
    }  

    void a_0()
    {
     /*80485fd:    55                       push   %ebp
     80485fe:    89 e5                    mov    %esp,%ebp
     8048600:    57                       push   %edi
     8048601:    56                       push   %esi
     8048602:    53                       push   %ebx
     8048603:    83 ec 4c                 sub    $0x4c,%esp
     8048606:    c7 45 d4 00 00 00 00     movl   $0x0,-0x2c(%ebp)*/
        int j = 0;

     /*804860d:    c7 45 e4 00 00 00 00     movl   $0x0,-0x1c(%ebp)
     8048614:    8b 45 e4                 mov    -0x1c(%ebp),%eax
     8048617:    89 45 e0                 mov    %eax,-0x20(%ebp)
     804861a:    8b 45 e0                 mov    -0x20(%ebp),%eax
     804861d:    89 45 dc                 mov    %eax,-0x24(%ebp)
     8048620:    8b 45 dc                 mov    -0x24(%ebp),%eax
     8048623:    89 45 d8                 mov    %eax,-0x28(%ebp)*/
        int a[4];
        a[0] = a[1] = a[2] = a[3] = 0;

     /*8048626:    8b 45 d4                 mov    -0x2c(%ebp),%eax
     8048629:    89 44 24 04              mov    %eax,0x4(%esp)
     804862d:    c7 04 24 74 88 04 08     movl   $0x8048874,(%esp)
     8048634:    e8 57 fd ff ff           call   8048390 */
        printf("%d\n", j);

     /*8048639:    8d 45 d4                 lea    -0x2c(%ebp),%eax
     804863c:    89 44 24 04              mov    %eax,0x4(%esp)
     8048640:    c7 04 24 74 88 04 08     movl   $0x8048874,(%esp)
     8048647:    e8 44 fd ff ff           call   8048390 */
        printf("%x\n", &j);

     /*804864c:    8b 45 d4                 mov    -0x2c(%ebp),%eax
     804864f:    8d 78 14                 lea    0x14(%eax),%edi    // edi = j+0x14
     8048652:    8b 45 d4                 mov    -0x2c(%ebp),%eax
     8048655:    8d 70 10                 lea    0x10(%eax),%esi    // esi = j+0x10
     8048658:    8b 45 d4                 mov    -0x2c(%ebp),%eax
     804865b:    8d 58 0c                 lea    0xc(%eax),%ebx    // ebx = j+0xc
     804865e:    8b 45 d4                 mov    -0x2c(%ebp),%eax
     8048661:    8d 48 08                 lea    0x8(%eax),%ecx    // ecx = j+0x8
     8048664:    8b 45 d4                 mov    -0x2c(%ebp),%eax
     8048667:    8d 50 04                 lea    0x4(%eax),%edx    // edx = j+0x4
     804866a:    8b 45 d4                 mov    -0x2c(%ebp),%eax    // eax = j;
     804866d:    89 7c 24 18              mov    %edi,0x18(%esp)
     8048671:    89 74 24 14              mov    %esi,0x14(%esp)
     8048675:    89 5c 24 10              mov    %ebx,0x10(%esp)
     8048679:    89 4c 24 0c              mov    %ecx,0xc(%esp)
     804867d:    89 54 24 08              mov    %edx,0x8(%esp)
     8048681:    89 44 24 04              mov    %eax,0x4(%esp)
     8048685:    c7 04 24 7c 88 04 08     movl   $0x804887c,(%esp)
     804868c:    e8 ff fc ff ff           call   8048390 */
        printf("%d %d %d %d %d %d\n", j , j+4, j+8, j+0xc, j+0x10, j+0x14);

     /*8048691:    8b 45 d4                 mov    -0x2c(%ebp),%eax
     8048694:    89 45 d8                 mov    %eax,-0x28(%ebp)*/
        a[0] = j;
     /*8048697:    8b 45 d4                 mov    -0x2c(%ebp),%eax
     804869a:    83 c0 04                 add    $0x4,%eax
     804869d:    89 45 dc                 mov    %eax,-0x24(%ebp)*/
        a[1] = j+4;

     /*80486a0:    8b 45 d4                 mov    -0x2c(%ebp),%eax
     80486a3:    83 c0 08                 add    $0x8,%eax
     80486a6:    89 45 e0                 mov    %eax,-0x20(%ebp)*/
        a[2] = j+8;

     /*80486a9:    8b 45 d4                 mov    -0x2c(%ebp),%eax
     80486ac:    83 c0 0c                 add    $0xc,%eax
     80486af:    89 45 e4                 mov    %eax,-0x1c(%ebp)*/
        a[3] = j+0xc;

     /*80486b2:    8b 45 e4                 mov    -0x1c(%ebp),%eax
     80486b5:    89 44 24 10              mov    %eax,0x10(%esp)
     80486b9:    8b 45 e0                 mov    -0x20(%ebp),%eax
     80486bc:    89 44 24 0c              mov    %eax,0xc(%esp)
     80486c0:    8b 45 dc                 mov    -0x24(%ebp),%eax
     80486c3:    89 44 24 08              mov    %eax,0x8(%esp)
     80486c7:    8b 45 d8                 mov    -0x28(%ebp),%eax
     80486ca:    89 44 24 04              mov    %eax,0x4(%esp)
     80486ce:    c7 04 24 9b 88 04 08     movl   $0x804889b,(%esp)
     80486d5:    e8 b6 fc ff ff           call   8048390 */
        printf("%d %d %d %d\n", a[0], a[1], a[2], a[3]);

     /*80486da:    83 c4 4c                 add    $0x4c,%esp
     80486dd:    5b                       pop    %ebx
     80486de:    5e                       pop    %esi
     80486df:    5f                       pop    %edi
     80486e0:    5d                       pop    %ebp
     80486e1:    c3                       ret*/
    }    

    void a_3()
    {
     /*80486e2:    55                       push   %ebp
     80486e3:    89 e5                    mov    %esp,%ebp
     80486e5:    57                       push   %edi
     80486e6:    56                       push   %esi
     80486e7:    53                       push   %ebx
     80486e8:    83 ec 4c                 sub    $0x4c,%esp
     80486eb:    c7 45 d4 03 00 00 00     movl   $0x3,-0x2c(%ebp)*/
        int j = 0;

     /*80486f2:    c7 45 e4 00 00 00 00     movl   $0x0,-0x1c(%ebp)
     80486f9:    8b 45 e4                 mov    -0x1c(%ebp),%eax
     80486fc:    89 45 e0                 mov    %eax,-0x20(%ebp)
     80486ff:    8b 45 e0                 mov    -0x20(%ebp),%eax
     8048702:    89 45 dc                 mov    %eax,-0x24(%ebp)
     8048705:    8b 45 dc                 mov    -0x24(%ebp),%eax
     8048708:    89 45 d8                 mov    %eax,-0x28(%ebp)*/
        int a[4];
        a[0] = a[1] = a[2] = a[3] = 0;

     /*804870b:    8b 45 d4                 mov    -0x2c(%ebp),%eax
     804870e:    89 44 24 04              mov    %eax,0x4(%esp)
     8048712:    c7 04 24 74 88 04 08     movl   $0x8048874,(%esp)
     8048719:    e8 72 fc ff ff           call   8048390 */
        printf("%d\n", j);

    /* 804871e:    8d 45 d4                 lea    -0x2c(%ebp),%eax
     8048721:    89 44 24 04              mov    %eax,0x4(%esp)
     8048725:    c7 04 24 74 88 04 08     movl   $0x8048874,(%esp)
     804872c:    e8 5f fc ff ff           call   8048390 */
        printf("%d\n", &j);

     /*8048731:    8b 45 d4                 mov    -0x2c(%ebp),%eax
     8048734:    8d 78 14                 lea    0x14(%eax),%edi
     8048737:    8b 45 d4                 mov    -0x2c(%ebp),%eax
     804873a:    8d 70 10                 lea    0x10(%eax),%esi
     804873d:    8b 45 d4                 mov    -0x2c(%ebp),%eax
     8048740:    8d 58 0c                 lea    0xc(%eax),%ebx
     8048743:    8b 45 d4                 mov    -0x2c(%ebp),%eax
     8048746:    8d 48 08                 lea    0x8(%eax),%ecx
     8048749:    8b 45 d4                 mov    -0x2c(%ebp),%eax
     804874c:    8d 50 04                 lea    0x4(%eax),%edx
     804874f:    8b 45 d4                 mov    -0x2c(%ebp),%eax
     8048752:    89 7c 24 18              mov    %edi,0x18(%esp)
     8048756:    89 74 24 14              mov    %esi,0x14(%esp)
     804875a:    89 5c 24 10              mov    %ebx,0x10(%esp)
     804875e:    89 4c 24 0c              mov    %ecx,0xc(%esp)
     8048762:    89 54 24 08              mov    %edx,0x8(%esp)
     8048766:    89 44 24 04              mov    %eax,0x4(%esp)
     804876a:    c7 04 24 7c 88 04 08     movl   $0x804887c,(%esp)
     8048771:    e8 1a fc ff ff           call   8048390 */
        printf("%d %d %d %d %d %d\n", j , j+4, j+8, j+0xc, j+0x10, j+0x14);

     /*8048776:    8b 45 d4                 mov    -0x2c(%ebp),%eax
     8048779:    89 45 d8                 mov    %eax,-0x28(%ebp)
     804877c:    8b 45 d4                 mov    -0x2c(%ebp),%eax
     804877f:    83 c0 04                 add    $0x4,%eax
     8048782:    89 45 dc                 mov    %eax,-0x24(%ebp)
     8048785:    8b 45 d4                 mov    -0x2c(%ebp),%eax
     8048788:    83 c0 08                 add    $0x8,%eax
     804878b:    89 45 e0                 mov    %eax,-0x20(%ebp)
     804878e:    8b 45 d4                 mov    -0x2c(%ebp),%eax
     8048791:    83 c0 0c                 add    $0xc,%eax
     8048794:    89 45 e4                 mov    %eax,-0x1c(%ebp)
     8048797:    8b 45 e4                 mov    -0x1c(%ebp),%eax
     804879a:    89 44 24 10              mov    %eax,0x10(%esp)
     804879e:    8b 45 e0                 mov    -0x20(%ebp),%eax
     80487a1:    89 44 24 0c              mov    %eax,0xc(%esp)
     80487a5:    8b 45 dc                 mov    -0x24(%ebp),%eax
     80487a8:    89 44 24 08              mov    %eax,0x8(%esp)
     80487ac:    8b 45 d8                 mov    -0x28(%ebp),%eax
     80487af:    89 44 24 04              mov    %eax,0x4(%esp)
     80487b3:    c7 04 24 9b 88 04 08     movl   $0x804889b,(%esp)
     80487ba:    e8 d1 fb ff ff           call   8048390 */
        printf("%d %d %d %d\n", a[0], a[1], a[2], a[3]);

     /*80487bf:    83 c4 4c                 add    $0x4c,%esp
     80487c2:    5b                       pop    %ebx
     80487c3:    5e                       pop    %esi
     80487c4:    5f                       pop    %edi
     80487c5:    5d                       pop    %ebp
     80487c6:    c3                       ret    */
    }

    int main()
    {
     /*qA80487c7:    55                       push   %ebp
     80487c8:    89 e5                    mov    %esp,%ebp
     80487ca:    83 e4 f0                 and    $0xfffffff0,%esp
     80487cd:    e8 fe fc ff ff           call   80484d0 */
        a_1();

     //80487d2:    e8 26 fe ff ff           call   80485fd
        a_0();

     //80487d7:    e8 06 ff ff ff           call   80486e2
        a_3();

     /*80487dc:    c9                       leave  
     80487dd:    c3                       ret    
     80487de:    66 90                    xchg   %ax,%ax*/
    }

    // code
    void a_1()
    {
        int *a = 1;
        int byte1, byte2, byte3, byte4;
        int b = 2;

        byte1 = byte2 = byte3 = byte4 = 0;

        printf("a=%x\n", a);    // 1
        printf("a=%x\n", &a);    // b7d24708

        printf("0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n", &a[0], &a[1], &a[2], &a[3], &a[4], &a[5]); // 0x1 0x5 0x9 0xd 0x11 0x15
        //printf("%x %x %x %x\n", a[0], a[1], a[2], a[3]);     // Segmentation fault (core dumped)

        byte1 = (char *)&a[0];
        byte2 = (char *)&a[1];
        byte3 = (char *)&a[2];
        byte4 = (char *)&a[3];

        printf("%x %x %x %x\n", byte1, byte2, byte3, byte4); // 1 5 9 d

        a = &b;
        printf("b=%x\n", &b);    // b7d246f4
        printf("a=%x\n", a);    // b7d246f4
        printf("a=%x\n", *a);    // 2
    }

    void a_0()
    {
        int *a = 0;
        int byte1, byte2, byte3, byte4;

        byte1 = byte2 = byte3 = byte4 = 0;

        printf("a=%x\n", a);    // 0    指向地址0
        //printf("a=%d\n", *a);    // Segmentation fault (core dumped) 取地址0上的数据,报错
        printf("a=%x\n", &a);    // c03f1498

        printf("0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n", &a[0], &a[1], &a[2], &a[3], &a[4], &a[5]); // 0x0 0x4 0x8 0xc 0x10 0x14
        //printf("%x %x %x %x\n", a[0], a[1], a[2], a[3]);     // Segmentation fault (core dumped)

        byte1 = (char *)&a[0];
        byte2 = (char *)&a[1];
        byte3 = (char *)&a[2];
        byte4 = (char *)&a[3];

        printf("%x %x %x %x\n", byte1, byte2, byte3, byte4); // 0 4 8 c
    }

    void a_3()
    {
        int *a = 3;
        int byte1, byte2, byte3, byte4;

        byte1 = byte2 = byte3 = byte4 = 0;

        printf("a=%x\n", a);    // 3
        printf("a=%x\n", &a);    // ce340a48

        printf("0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n", &a[0], &a[1], &a[2], &a[3], &a[4], &a[5]); // 0x3 0x7 0xb 0xf 0x13 0x17
        //printf("%x %x %x %x\n", a[0], a[1], a[2], a[3]);     // Segmentation fault (core dumped)

        byte1 = (char *)&a[0];
        byte2 = (char *)&a[1];
        byte3 = (char *)&a[2];
        byte4 = (char *)&a[3];

        printf("%x %x %x %x\n", byte1, byte2, byte3, byte4); // 3 7 b f
    }

    void main()
    {
        a_1();
        a_0();
        a_3();
    }

  • 相关阅读:
    Java三大特征之一——继承
    R语言编写用户自定义函数:编写自定义函数并创建局部变量(函数内部的变量、在函数内部使用、函数运行完成后自动删除)
    线段树【java实现】
    被问实习最大的收获是什么可以怎么回答?
    XmlElement注解在Java的数组属性上,以产生多个相同的XML元素
    多神经网络模型联合训练,全连接神经网络模型
    Linux 环境下maven安装配置
    学习基因富集工具DAVID(3)
    一文看懂 Python 中的函数参数
    IDL学习:语法基础-结构体
  • 原文地址:https://blog.csdn.net/xiaozhiwise/article/details/128112319