反汇编 之构造与析构函数

86 篇文章 1 订阅

/* .h */
class AppsCtrl {
public:
    AppsCtrl();
    AppsCtrl(const AppsCtrl& orig);
    virtual ~AppsCtrl();
    
    XAG_BOOL AppsCtrl_Init();
    
    XAG_VOID AppsCtrl_Release();
    
public:

    CameraCtrl m_CameraCtrl;
};

/* .cpp */
AppsCtrl::AppsCtrl()
{
}

AppsCtrl::AppsCtrl(const AppsCtrl& orig)
{
}

AppsCtrl::~AppsCtrl()
{
}

/* main.cpp */
int main(int argc,  char** argv)
{
    pm_AppsCtrl = new AppsCtrl;

    bRet = pm_AppsCtrl->AppsCtrl_Init();
    sleep(2);
    while (1)sleep(2);

    return 0;
}

/* 反汇编 */


00018e38 <_Znwj@plt>:        /* .rel.plt 段地址 */
   18e38:    e28fc604     add    ip, pc, #4, 12    ; 0x400000
   18e3c:    e28cca4f     add    ip, ip, #323584    ; 0x4f000
   18e40:    e5bcf1e8     ldr    pc, [ip, #488]!    ; 0x1e8

000194b4 <_ZdlPvj@plt>:        /* .rel.plt 段地址 */
   194b4:    e28fc604     add    ip, pc, #4, 12    ; 0x400000
   194b8:    e28cca4e     add    ip, ip, #319488    ; 0x4e000
   194bc:    e5bcfd80     ldr    pc, [ip, #3456]!    ; 0xd80

000199b8 <__cxa_end_cleanup@plt>:    /* .rel.plt 段地址 */
   199b8:    e28fc604     add    ip, pc, #4, 12    ; 0x400000
   199bc:    e28cca4e     add    ip, ip, #319488    ; 0x4e000
   199c0:    e5bcfa20     ldr    pc, [ip, #2592]!    ; 0xa20


0001c148 <_ZN8AppsCtrlC1Ev>:                /* 构造函数 */

AppsCtrl::AppsCtrl()
   1c148:    b580          push    {r7, lr}
   1c14a:    b082          sub    sp, #8
   1c14c:    af00          add    r7, sp, #0
   1c14e:    6078          str    r0, [r7, #4]
   1c150:    4a06          ldr    r2, [pc, #24]    ; (1c16c <_ZN8AppsCtrlC1Ev+0x24>)
   1c152:    687b          ldr    r3, [r7, #4]
   1c154:    601a          str    r2, [r3, #0]
   1c156:    687b          ldr    r3, [r7, #4]
   1c158:    3308          adds    r3, #8
   1c15a:    4618          mov    r0, r3
   1c15c:    f002 fb64     bl    1e828 <_ZN10CameraCtrlC1Ev>    /* 类申明里面类变量构造函数 */
{
}
   1c160:    687b          ldr    r3, [r7, #4]
   1c162:    4618          mov    r0, r3
   1c164:    3708          adds    r7, #8
   1c166:    46bd          mov    sp, r7
   1c168:    bd80          pop    {r7, pc}
   1c16a:    bf00          nop
   1c16c:    00390f84     .word    0x00390f84

0001c170 <_ZN8AppsCtrlC1ERKS_>:

AppsCtrl::AppsCtrl(const AppsCtrl& orig)    /* 带参数构造函数 */
   1c170:    b580          push    {r7, lr}
   1c172:    b082          sub    sp, #8
   1c174:    af00          add    r7, sp, #0
   1c176:    6078          str    r0, [r7, #4]
   1c178:    6039          str    r1, [r7, #0]
   1c17a:    4a06          ldr    r2, [pc, #24]    ; (1c194 <_ZN8AppsCtrlC1ERKS_+0x24>)
   1c17c:    687b          ldr    r3, [r7, #4]
   1c17e:    601a          str    r2, [r3, #0]
   1c180:    687b          ldr    r3, [r7, #4]
   1c182:    3308          adds    r3, #8
   1c184:    4618          mov    r0, r3
   1c186:    f002 fb4f     bl    1e828 <_ZN10CameraCtrlC1Ev>
{
}
   1c18a:    687b          ldr    r3, [r7, #4]
   1c18c:    4618          mov    r0, r3
   1c18e:    3708          adds    r7, #8
   1c190:    46bd          mov    sp, r7
   1c192:    bd80          pop    {r7, pc}
   1c194:    00390f84     .word    0x00390f84

0001c198 <_ZN8AppsCtrlD1Ev>:

AppsCtrl::~AppsCtrl()                        /* 析构函数1,被析构函数0调用 */
   1c198:    b580          push    {r7, lr}
   1c19a:    b082          sub    sp, #8
   1c19c:    af00          add    r7, sp, #0
   1c19e:    6078          str    r0, [r7, #4]
   1c1a0:    4a06          ldr    r2, [pc, #24]    ; (1c1bc <_ZN8AppsCtrlD1Ev+0x24>)
   1c1a2:    687b          ldr    r3, [r7, #4]
   1c1a4:    601a          str    r2, [r3, #0]
   1c1a6:    687b          ldr    r3, [r7, #4]
   1c1a8:    3308          adds    r3, #8
   1c1aa:    4618          mov    r0, r3
   1c1ac:    f002 fd18     bl    1ebe0 <_ZN10CameraCtrlD1Ev>    /* 类申明里面类变量析构函数 */
{
}
   1c1b0:    687b          ldr    r3, [r7, #4]
   1c1b2:    4618          mov    r0, r3
   1c1b4:    3708          adds    r7, #8
   1c1b6:    46bd          mov    sp, r7
   1c1b8:    bd80          pop    {r7, pc}
   1c1ba:    bf00          nop
   1c1bc:    00390f84     .word    0x00390f84

0001c1c0 <_ZN8AppsCtrlD0Ev>:            /* 析构函数0 */
AppsCtrl::~AppsCtrl()
   1c1c0:    b580          push    {r7, lr}
   1c1c2:    b082          sub    sp, #8
   1c1c4:    af00          add    r7, sp, #0
   1c1c6:    6078          str    r0, [r7, #4]
}
   1c1c8:    6878          ldr    r0, [r7, #4]
   1c1ca:    f7ff ffe5     bl    1c198 <_ZN8AppsCtrlD1Ev>    /* 调用析构函数1 */
   1c1ce:    f643 0138     movw    r1, #14392    ; 0x3838
   1c1d2:    6878          ldr    r0, [r7, #4]
   1c1d4:    f7fd e96e     blx    194b4 <_ZdlPvj@plt>        /* delete调用 */
   1c1d8:    687b          ldr    r3, [r7, #4]
   1c1da:    4618          mov    r0, r3
   1c1dc:    3708          adds    r7, #8
   1c1de:    46bd          mov    sp, r7
   1c1e0:    bd80          pop    {r7, pc}

int main(int argc, char** argv)
{
  1300ba:    b5f0          push    {r4, r5, r6, r7, lr}
  1300bc:    b0bb          sub    sp, #236    ; 0xec
  1300be:    af0a          add    r7, sp, #40    ; 0x28
  1300c0:    60f8          str    r0, [r7, #12]
  1300c2:    60b9          str    r1, [r7, #8]

    pm_AppsCtrl = new AppsCtrl;
  130d38:    f643 0038     movw    r0, #14392    ; 0x3838
  130d3c:    f6e8 e87c     blx    18e38 <_Znwj@plt>            /* 调用new函数 */
  130d40:    4603          mov    r3, r0
  130d42:    461c          mov    r4, r3
  130d44:    4620          mov    r0, r4
  130d46:    f6eb f9ff     bl    1c148 <_ZN8AppsCtrlC1Ev>    /* AppsCtrl构造函数 */
  130d4a:    f641 33f4     movw    r3, #7156    ; 0x1bf4
  130d4e:    f2c0 0394     movt    r3, #148    ; 0x94        /* 0x941bf4 为.debug_frame段地址 */
  130d52:    601c          str    r4, [r3, #0]
    bRet = pm_AppsCtrl->AppsCtrl_Init();
  130d54:    f641 33f4     movw    r3, #7156    ; 0x1bf4
  130d58:    f2c0 0394     movt    r3, #148    ; 0x94
  130d5c:    681b          ldr    r3, [r3, #0]
  130d5e:    4618          mov    r0, r3
  130d60:    f6eb fa3f     bl    1c1e2 <_ZN8AppsCtrl13AppsCtrl_InitEv>    /* AppsCtrl_Init 初始化函数调用 */
  130d64:    4603          mov    r3, r0
  130d66:    f887 308f     strb.w    r3, [r7, #143]    ; 0x8f
   

    sleep(2);
  130d6a:    2002          movs    r0, #2
  130d6c:    f6e8 ef1a     blx    19ba4 <sleep@plt>
    while (1)sleep(2);
  130d70:    2002          movs    r0, #2
  130d72:    f6e8 ef18     blx    19ba4 <sleep@plt>
  130d76:    e7fb          b.n    130d70 <main+0xcb6>
    pm_AppsCtrl = new AppsCtrl;
  130d78:    f643 0138     movw    r1, #14392    ; 0x3838
  130d7c:    4620          mov    r0, r4
  130d7e:    f6e8 eb9a     blx    194b4 <_ZdlPvj@plt>                /* delete调用 */
  130d82:    f6e8 ee1a     blx    199b8 <__cxa_end_cleanup@plt>    /* 清除调用 */

    return 0;
}
  130d86:    4618          mov    r0, r3
  130d88:    37c4          adds    r7, #196    ; 0xc4
  130d8a:    46bd          mov    sp, r7
  130d8c:    bdf0          pop    {r4, r5, r6, r7, pc}

/* readelf -S app */

There are 40 section headers, starting at offset 0xce33c8:

Section Headers:
  [Nr] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
  [ 0]                   NULL            00000000 000000 000000 00      0   0  0
  [ 1] .interp           PROGBITS        00010154 000154 000019 00   A  0   0  1
  [ 2] .note.ABI-tag     NOTE            00010170 000170 000020 00   A  0   0  4
  [ 3] .note.gnu.build-i NOTE            00010190 000190 000024 00   A  0   0  4
  [ 4] .hash             HASH            000101b4 0001b4 0012d0 04   A  5   0  4
  [ 5] .dynsym           DYNSYM          00011484 001484 002a90 10   A  6   1  4
  [ 6] .dynstr           STRTAB          00013f14 003f14 003a16 00   A  0   0  1
  [ 7] .gnu.version      VERSYM          0001792a 00792a 000552 02   A  5   0  2
  [ 8] .gnu.version_r    VERNEED         00017e7c 007e7c 0001a0 00   A  6   6  4
  [ 9] .rel.dyn          REL             0001801c 00801c 0000a0 08   A  5   0  4
  [10] .rel.plt          REL             000180bc 0080bc 000d08 08  AI  5  23  4
  [11] .init             PROGBITS        00018dc4 008dc4 00000c 00  AX  0   0  4
  [12] .plt              PROGBITS        00018dd0 008dd0 001440 04  AX  0   0  4
  [13] .text             PROGBITS        0001a210 00a210 376dd8 00  AX  0   0  8
  [14] .fini             PROGBITS        00390fe8 380fe8 000008 00  AX  0   0  4
  [15] .rodata           PROGBITS        00390ff0 380ff0 08fd00 00   A  0   0 16
  [16] .ARM.extab        PROGBITS        00420cf0 410cf0 0083fc 00   A  0   0  4
  [17] .ARM.exidx        ARM_EXIDX       004290ec 4190ec 0062d8 00  AL 13   0  4
  [18] .eh_frame         PROGBITS        0042f3c4 41f3c4 000004 00   A  0   0  4
  [19] .init_array       INIT_ARRAY      0043f6ac 41f6ac 000090 04  WA  0   0  4
  [20] .fini_array       FINI_ARRAY      0043f73c 41f73c 000004 04  WA  0   0  4
  [21] .data.rel.ro      PROGBITS        0043f740 41f740 0287ac 00  WA  0   0  8
  [22] .dynamic          DYNAMIC         00467eec 447eec 000110 08  WA  6   0  4
  [23] .got              PROGBITS        00468000 448000 000a6c 04  WA  0   0  4
  [24] .data             PROGBITS        00468a70 448a70 004480 00  WA  0   0  8
  [25] .ccm              PROGBITS        0046cef0 44cef0 000200 00  WA  0   0  4
  [26] .bss              NOBITS          0046d0f0 44d0f0 531324 00  WA  0   0  8
  [27] .comment          PROGBITS        00000000 44d0f0 000024 01  MS  0   0  1
  [28] .ARM.attributes   ARM_ATTRIBUTES  00000000 44d114 000033 00      0   0  1
  [29] .debug_aranges    PROGBITS        00000000 44d148 0098d0 00      0   0  8
  [30] .debug_info       PROGBITS        00000000 456a18 43e89a 00      0   0  1
  [31] .debug_abbrev     PROGBITS        00000000 8952b2 0447f1 00      0   0  1
  [32] .debug_line       PROGBITS        00000000 8d9aa3 0ba9a1 00      0   0  1
  [33] .debug_frame      PROGBITS        00000000 994444 081850 00      0   0  4
  [34] .debug_str        PROGBITS        00000000 a15c94 1106bf 01  MS  0   0  1
  [35] .debug_loc        PROGBITS        00000000 b26353 028cfd 00      0   0  1
  [36] .debug_ranges     PROGBITS        00000000 b4f050 010720 00      0   0  8
  [37] .symtab           SYMTAB          00000000 b5f770 0c65e0 10     38 36431  4
  [38] .strtab           STRTAB          00000000 c25d50 0bd4f4 00      0   0  1
  [39] .shstrtab         STRTAB          00000000 ce3244 000184 00      0   0  1
Key to Flags:
  W (write), A (alloc), X (execute), M (merge), S (strings), I (info),
  L (link order), O (extra OS processing required), G (group), T (TLS),
  C (compressed), x (unknown), o (OS specific), E (exclude),
  y (purecode), p (processor specific)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值