/* .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)