• 逆向-beginners之C++继承


    #include <stdio.h>

    /*
     * 继承
     */

    class object
    {
        public:
                int color;
                object() {}
                object(int color) {
                    this->color = color;
                }
                void print_color() {
                    printf("color=%d\n", color);
                }
    };

    class box:public object
    {
        private:
                int width, height, depth;
        public:
                box(int color, int width, int height, int depth)
                {
                    this->color = color;
                    this->width = width;
                    this->height = height;
                    this->depth = depth;
                }

                void dump()
                {
                    printf("this is box, color=%d, width=%d, height=%d, depth=%d\n", color, width, height, depth);
                }
    };

    class sphere:public object
    {
        private:
                int radius;
        public:
                sphere(int color, int radius)
                {
                    this->color = color;
                    this->radius = radius;
                }

                void dump()
                {
                    printf("this is sphere.color=%d, radius=%d\n", color, radius);
                }
    };

    int main()
    {
        box b(1, 10, 20, 30);
        sphere s(2, 40);

        b.print_color();
        s.print_color();

        b.dump();
        s.dump();

        return 0;
    }


    #if 0


    /* gcc */
        GCC不会使用ECX传递this指针,它会以函数的第一个参数的传递方式传递this指针。

    #endif

    #if 0
    /*
     * intel
     */
    0000000000001169

    :
        1169:    f3 0f 1e fa              endbr64
        116d:    55                       push   %rbp
        116e:    48 89 e5                 mov    %rsp,%rbp
        1171:    48 83 ec 30              sub    $0x30,%rsp
        1175:    64 48 8b 04 25 28 00     mov    %fs:0x28,%rax
        117c:    00 00
        117e:    48 89 45 f8              mov    %rax,-0x8(%rbp)
        1182:    31 c0                    xor    %eax,%eax
        1184:    48 8d 45 e0              lea    -0x20(%rbp),%rax
        1188:    41 b8 1e 00 00 00        mov    $0x1e,%r8d
        118e:    b9 14 00 00 00           mov    $0x14,%ecx
        1193:    ba 0a 00 00 00           mov    $0xa,%edx
        1198:    be 01 00 00 00           mov    $0x1,%esi
        119d:    48 89 c7                 mov    %rax,%rdi
        11a0:    e8 9d 00 00 00           callq  1242 <_ZN3boxC1Eiiii>
        11a5:    48 8d 45 d8              lea    -0x28(%rbp),%rax
        11a9:    ba 28 00 00 00           mov    $0x28,%edx
        11ae:    be 02 00 00 00           mov    $0x2,%esi
        11b3:    48 89 c7                 mov    %rax,%rdi
        11b6:    e8 1f 01 00 00           callq  12da <_ZN6sphereC1Eii>
        11bb:    48 8d 45 e0              lea    -0x20(%rbp),%rax
        11bf:    48 89 c7                 mov    %rax,%rdi
        11c2:    e8 4f 00 00 00           callq  1216 <_ZN6object11print_colorEv>
        11c7:    48 8d 45 d8              lea    -0x28(%rbp),%rax
        11cb:    48 89 c7                 mov    %rax,%rdi
        11ce:    e8 43 00 00 00           callq  1216 <_ZN6object11print_colorEv>
        11d3:    48 8d 45 e0              lea    -0x20(%rbp),%rax
        11d7:    48 89 c7                 mov    %rax,%rdi
        11da:    e8 b7 00 00 00           callq  1296 <_ZN3box4dumpEv>
        11df:    48 8d 45 d8              lea    -0x28(%rbp),%rax
        11e3:    48 89 c7                 mov    %rax,%rdi
        11e6:    e8 27 01 00 00           callq  1312 <_ZN6sphere4dumpEv>
        11eb:    b8 00 00 00 00           mov    $0x0,%eax
        11f0:    48 8b 4d f8              mov    -0x8(%rbp),%rcx
        11f4:    64 48 33 0c 25 28 00     xor    %fs:0x28,%rcx
        11fb:    00 00
        11fd:    74 05                    je     1204
        11ff:    e8 5c fe ff ff           callq  1060 <__stack_chk_fail@plt>
        1204:    c9                       leaveq
        1205:    c3                       retq   

    0000000000001206 <_ZN6objectC1Ev>:
        1206:    f3 0f 1e fa              endbr64
        120a:    55                       push   %rbp
        120b:    48 89 e5                 mov    %rsp,%rbp
        120e:    48 89 7d f8              mov    %rdi,-0x8(%rbp)
        1212:    90                       nop
        1213:    5d                       pop    %rbp
        1214:    c3                       retq   
        1215:    90                       nop

    0000000000001216 <_ZN6object11print_colorEv>:
        1216:    f3 0f 1e fa              endbr64
        121a:    55                       push   %rbp
        121b:    48 89 e5                 mov    %rsp,%rbp
        121e:    48 83 ec 10              sub    $0x10,%rsp
        1222:    48 89 7d f8              mov    %rdi,-0x8(%rbp)
        1226:    48 8b 45 f8              mov    -0x8(%rbp),%rax
        122a:    8b 00                    mov    (%rax),%eax
        122c:    89 c6                    mov    %eax,%esi
        122e:    48 8d 3d d3 0d 00 00     lea    0xdd3(%rip),%rdi        # 2008 <_IO_stdin_used+0x8>
        1235:    b8 00 00 00 00           mov    $0x0,%eax
        123a:    e8 31 fe ff ff           callq  1070
        123f:    90                       nop
        1240:    c9                       leaveq
        1241:    c3                       retq   

    0000000000001242 <_ZN3boxC1Eiiii>:
        1242:    f3 0f 1e fa              endbr64
        1246:    55                       push   %rbp
        1247:    48 89 e5                 mov    %rsp,%rbp
        124a:    48 83 ec 20              sub    $0x20,%rsp
        124e:    48 89 7d f8              mov    %rdi,-0x8(%rbp)
        1252:    89 75 f4                 mov    %esi,-0xc(%rbp)
        1255:    89 55 f0                 mov    %edx,-0x10(%rbp)
        1258:    89 4d ec                 mov    %ecx,-0x14(%rbp)
        125b:    44 89 45 e8              mov    %r8d,-0x18(%rbp)
        125f:    48 8b 45 f8              mov    -0x8(%rbp),%rax
        1263:    48 89 c7                 mov    %rax,%rdi
        1266:    e8 9b ff ff ff           callq  1206 <_ZN6objectC1Ev>
        126b:    48 8b 45 f8              mov    -0x8(%rbp),%rax
        126f:    8b 55 f4                 mov    -0xc(%rbp),%edx
        1272:    89 10                    mov    %edx,(%rax)
        1274:    48 8b 45 f8              mov    -0x8(%rbp),%rax
        1278:    8b 55 f0                 mov    -0x10(%rbp),%edx
        127b:    89 50 04                 mov    %edx,0x4(%rax)
        127e:    48 8b 45 f8              mov    -0x8(%rbp),%rax
        1282:    8b 55 ec                 mov    -0x14(%rbp),%edx
        1285:    89 50 08                 mov    %edx,0x8(%rax)
        1288:    48 8b 45 f8              mov    -0x8(%rbp),%rax
        128c:    8b 55 e8                 mov    -0x18(%rbp),%edx
        128f:    89 50 0c                 mov    %edx,0xc(%rax)
        1292:    90                       nop
        1293:    c9                       leaveq
        1294:    c3                       retq   
        1295:    90                       nop

    0000000000001296 <_ZN3box4dumpEv>:
        1296:    f3 0f 1e fa              endbr64
        129a:    55                       push   %rbp
        129b:    48 89 e5                 mov    %rsp,%rbp
        129e:    48 83 ec 10              sub    $0x10,%rsp
        12a2:    48 89 7d f8              mov    %rdi,-0x8(%rbp)
        12a6:    48 8b 45 f8              mov    -0x8(%rbp),%rax
        12aa:    8b 70 0c                 mov    0xc(%rax),%esi
        12ad:    48 8b 45 f8              mov    -0x8(%rbp),%rax
        12b1:    8b 48 08                 mov    0x8(%rax),%ecx
        12b4:    48 8b 45 f8              mov    -0x8(%rbp),%rax
        12b8:    8b 50 04                 mov    0x4(%rax),%edx
        12bb:    48 8b 45 f8              mov    -0x8(%rbp),%rax
        12bf:    8b 00                    mov    (%rax),%eax
        12c1:    41 89 f0                 mov    %esi,%r8d
        12c4:    89 c6                    mov    %eax,%esi
        12c6:    48 8d 3d 4b 0d 00 00     lea    0xd4b(%rip),%rdi        # 2018 <_IO_stdin_used+0x18>
        12cd:    b8 00 00 00 00           mov    $0x0,%eax
        12d2:    e8 99 fd ff ff           callq  1070
        12d7:    90                       nop
        12d8:    c9                       leaveq
        12d9:    c3                       retq   

    00000000000012da <_ZN6sphereC1Eii>:
        12da:    f3 0f 1e fa              endbr64
        12de:    55                       push   %rbp
        12df:    48 89 e5                 mov    %rsp,%rbp
        12e2:    48 83 ec 10              sub    $0x10,%rsp
        12e6:    48 89 7d f8              mov    %rdi,-0x8(%rbp)
        12ea:    89 75 f4                 mov    %esi,-0xc(%rbp)
        12ed:    89 55 f0                 mov    %edx,-0x10(%rbp)
        12f0:    48 8b 45 f8              mov    -0x8(%rbp),%rax
        12f4:    48 89 c7                 mov    %rax,%rdi
        12f7:    e8 0a ff ff ff           callq  1206 <_ZN6objectC1Ev>
        12fc:    48 8b 45 f8              mov    -0x8(%rbp),%rax
        1300:    8b 55 f4                 mov    -0xc(%rbp),%edx
        1303:    89 10                    mov    %edx,(%rax)
        1305:    48 8b 45 f8              mov    -0x8(%rbp),%rax
        1309:    8b 55 f0                 mov    -0x10(%rbp),%edx
        130c:    89 50 04                 mov    %edx,0x4(%rax)
        130f:    90                       nop
        1310:    c9                       leaveq
        1311:    c3                       retq   

    0000000000001312 <_ZN6sphere4dumpEv>:
        1312:    f3 0f 1e fa              endbr64
        1316:    55                       push   %rbp
        1317:    48 89 e5                 mov    %rsp,%rbp
        131a:    48 83 ec 10              sub    $0x10,%rsp
        131e:    48 89 7d f8              mov    %rdi,-0x8(%rbp)
        1322:    48 8b 45 f8              mov    -0x8(%rbp),%rax
        1326:    8b 50 04                 mov    0x4(%rax),%edx
        1329:    48 8b 45 f8              mov    -0x8(%rbp),%rax
        132d:    8b 00                    mov    (%rax),%eax
        132f:    89 c6                    mov    %eax,%esi
        1331:    48 8d 3d 18 0d 00 00     lea    0xd18(%rip),%rdi        # 2050 <_IO_stdin_used+0x50>
        1338:    b8 00 00 00 00           mov    $0x0,%eax
        133d:    e8 2e fd ff ff           callq  1070
        1342:    90                       nop
        1343:    c9                       leaveq
        1344:    c3                       retq   
        1345:    66 2e 0f 1f 84 00 00     nopw   %cs:0x0(%rax,%rax,1)
        134c:    00 00 00
        134f:    90                       nop

    /*
     * arm
     */
    000000000040062c

    :
      40062c:    a9bd7bfd     stp    x29, x30, [sp, #-48]!
      400630:    910003fd     mov    x29, sp
      400634:    910083a0     add    x0, x29, #0x20
      400638:    528003c4     mov    w4, #0x1e                      // #30
      40063c:    52800283     mov    w3, #0x14                      // #20
      400640:    52800142     mov    w2, #0xa                       // #10
      400644:    52800021     mov    w1, #0x1                       // #1
      400648:    94000020     bl    4006c8 <_ZN3boxC1Eiiii>
      40064c:    910063a0     add    x0, x29, #0x18
      400650:    52800502     mov    w2, #0x28                      // #40
      400654:    52800041     mov    w1, #0x2                       // #2
      400658:    94000045     bl    40076c <_ZN6sphereC1Eii>
      40065c:    910083a0     add    x0, x29, #0x20
      400660:    9400000f     bl    40069c <_ZN6object11print_colorEv>
      400664:    910063a0     add    x0, x29, #0x18
      400668:    9400000d     bl    40069c <_ZN6object11print_colorEv>
      40066c:    910083a0     add    x0, x29, #0x20
      400670:    9400002e     bl    400728 <_ZN3box4dumpEv>
      400674:    910063a0     add    x0, x29, #0x18
      400678:    9400004d     bl    4007ac <_ZN6sphere4dumpEv>
      40067c:    52800000     mov    w0, #0x0                       // #0
      400680:    a8c37bfd     ldp    x29, x30, [sp], #48
      400684:    d65f03c0     ret

    0000000000400688 <_ZN6objectC1Ev>:
      400688:    d10043ff     sub    sp, sp, #0x10
      40068c:    f90007e0     str    x0, [sp, #8]
      400690:    d503201f     nop
      400694:    910043ff     add    sp, sp, #0x10
      400698:    d65f03c0     ret

    000000000040069c <_ZN6object11print_colorEv>:
      40069c:    a9be7bfd     stp    x29, x30, [sp, #-32]!
      4006a0:    910003fd     mov    x29, sp
      4006a4:    f9000fa0     str    x0, [x29, #24]
      4006a8:    f9400fa0     ldr    x0, [x29, #24]
      4006ac:    b9400001     ldr    w1, [x0]
      4006b0:    90000000     adrp    x0, 400000 <_init-0x4b8>
      4006b4:    91224000     add    x0, x0, #0x890
      4006b8:    97ffff9a     bl    400520
      4006bc:    d503201f     nop
      4006c0:    a8c27bfd     ldp    x29, x30, [sp], #32
      4006c4:    d65f03c0     ret

    00000000004006c8 <_ZN3boxC1Eiiii>:
      4006c8:    a9bd7bfd     stp    x29, x30, [sp, #-48]!
      4006cc:    910003fd     mov    x29, sp
      4006d0:    f90017a0     str    x0, [x29, #40]
      4006d4:    b90027a1     str    w1, [x29, #36]
      4006d8:    b90023a2     str    w2, [x29, #32]
      4006dc:    b9001fa3     str    w3, [x29, #28]
      4006e0:    b9001ba4     str    w4, [x29, #24]
      4006e4:    f94017a0     ldr    x0, [x29, #40]
      4006e8:    97ffffe8     bl    400688 <_ZN6objectC1Ev>
      4006ec:    f94017a0     ldr    x0, [x29, #40]
      4006f0:    b94027a1     ldr    w1, [x29, #36]
      4006f4:    b9000001     str    w1, [x0]
      4006f8:    f94017a0     ldr    x0, [x29, #40]
      4006fc:    b94023a1     ldr    w1, [x29, #32]
      400700:    b9000401     str    w1, [x0, #4]
      400704:    f94017a0     ldr    x0, [x29, #40]
      400708:    b9401fa1     ldr    w1, [x29, #28]
      40070c:    b9000801     str    w1, [x0, #8]
      400710:    f94017a0     ldr    x0, [x29, #40]
      400714:    b9401ba1     ldr    w1, [x29, #24]
      400718:    b9000c01     str    w1, [x0, #12]
      40071c:    d503201f     nop
      400720:    a8c37bfd     ldp    x29, x30, [sp], #48
      400724:    d65f03c0     ret

    0000000000400728 <_ZN3box4dumpEv>:
      400728:    a9be7bfd     stp    x29, x30, [sp, #-32]!
      40072c:    910003fd     mov    x29, sp
      400730:    f9000fa0     str    x0, [x29, #24]
      400734:    f9400fa0     ldr    x0, [x29, #24]
      400738:    b9400001     ldr    w1, [x0]
      40073c:    f9400fa0     ldr    x0, [x29, #24]
      400740:    b9400402     ldr    w2, [x0, #4]
      400744:    f9400fa0     ldr    x0, [x29, #24]
      400748:    b9400803     ldr    w3, [x0, #8]
      40074c:    f9400fa0     ldr    x0, [x29, #24]
      400750:    b9400c04     ldr    w4, [x0, #12]
      400754:    90000000     adrp    x0, 400000 <_init-0x4b8>
      400758:    91228000     add    x0, x0, #0x8a0
      40075c:    97ffff71     bl    400520
      400760:    d503201f     nop
      400764:    a8c27bfd     ldp    x29, x30, [sp], #32
      400768:    d65f03c0     ret

    000000000040076c <_ZN6sphereC1Eii>:
      40076c:    a9be7bfd     stp    x29, x30, [sp, #-32]!
      400770:    910003fd     mov    x29, sp
      400774:    f9000fa0     str    x0, [x29, #24]
      400778:    b90017a1     str    w1, [x29, #20]
      40077c:    b90013a2     str    w2, [x29, #16]
      400780:    f9400fa0     ldr    x0, [x29, #24]
      400784:    97ffffc1     bl    400688 <_ZN6objectC1Ev>
      400788:    f9400fa0     ldr    x0, [x29, #24]
      40078c:    b94017a1     ldr    w1, [x29, #20]
      400790:    b9000001     str    w1, [x0]
      400794:    f9400fa0     ldr    x0, [x29, #24]
      400798:    b94013a1     ldr    w1, [x29, #16]
      40079c:    b9000401     str    w1, [x0, #4]
      4007a0:    d503201f     nop
      4007a4:    a8c27bfd     ldp    x29, x30, [sp], #32
      4007a8:    d65f03c0     ret

    00000000004007ac <_ZN6sphere4dumpEv>:
      4007ac:    a9be7bfd     stp    x29, x30, [sp, #-32]!
      4007b0:    910003fd     mov    x29, sp
      4007b4:    f9000fa0     str    x0, [x29, #24]
      4007b8:    f9400fa0     ldr    x0, [x29, #24]
      4007bc:    b9400001     ldr    w1, [x0]
      4007c0:    f9400fa0     ldr    x0, [x29, #24]
      4007c4:    b9400402     ldr    w2, [x0, #4]
      4007c8:    90000000     adrp    x0, 400000 <_init-0x4b8>
      4007cc:    91236000     add    x0, x0, #0x8d8
      4007d0:    97ffff54     bl    400520
      4007d4:    d503201f     nop
      4007d8:    a8c27bfd     ldp    x29, x30, [sp], #32
      4007dc:    d65f03c0     ret


    #endif

  • 相关阅读:
    AVL 树
    浅析Redis大Key
    微信小程序文字上下无缝轮播(滚动效果)
    每个表空间数据文件数的限制
    背包问题详解(含代码)
    学校报名测评小程序开发制作功能介绍
    ROS2进阶:在windows10上用vs2019编译rviz2
    操作系统·操作系统引论
    Spring Boot Starter必知必会(Spring Boot Starter简介及定义方法分享)
    前端工程化:使用 shelljs 生成 yapi 接口文件
  • 原文地址:https://blog.csdn.net/xiaozhiwise/article/details/133317352