设为首页 加入收藏

TOP

函数执行顺序(四)
2023-07-23 13:38:24 】 浏览:173
Tags:
,-0x8(%rbp) 1366: 48 8d 35 a1 0c 00 00 lea 0xca1(%rip),%rsi # 200e <_ZStL19piecewise_construct+0xa> 136d: 48 8d 3d cc 2c 00 00 lea 0x2ccc(%rip),%rdi # 4040 <_ZSt4cout@@GLIBCXX_3.4> 1374: e8 37 fd ff ff callq 10b0 <_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@plt> 1379: 48 89 c2 mov %rax,%rdx 137c: 48 8b 05 4d 2c 00 00 mov 0x2c4d(%rip),%rax # 3fd0 <_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_@GLIBCXX_3.4> 1383: 48 89 c6 mov %rax,%rsi 1386: 48 89 d7 mov %rdx,%rdi 1389: e8 32 fd ff ff callq 10c0 <_ZNSolsEPFRSoS_E@plt> 138e: 90 nop 138f: c9 leaveq 1390: c3 retq 1391: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1) 1398: 00 00 00 139b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) 00000000000013a0 <__libc_csu_init>: 13a0: f3 0f 1e fa endbr64 13a4: 41 57 push %r15 13a6: 4c 8d 3d bb 29 00 00 lea 0x29bb(%rip),%r15 # 3d68 <__frame_dummy_init_array_entry> 13ad: 41 56 push %r14 13af: 49 89 d6 mov %rdx,%r14 13b2: 41 55 push %r13 13b4: 49 89 f5 mov %rsi,%r13 13b7: 41 54 push %r12 13b9: 41 89 fc mov %edi,%r12d 13bc: 55 push %rbp 13bd: 48 8d 2d b4 29 00 00 lea 0x29b4(%rip),%rbp # 3d78 <__do_global_dtors_aux_fini_array_entry> 13c4: 53 push %rbx 13c5: 4c 29 fd sub %r15,%rbp 13c8: 48 83 ec 08 sub $0x8,%rsp 13cc: e8 2f fc ff ff callq 1000 <_init> 13d1: 48 c1 fd 03 sar $0x3,%rbp 13d5: 74 1f je 13f6 <__libc_csu_init+0x56> 13d7: 31 db xor %ebx,%ebx 13d9: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) 13e0: 4c 89 f2 mov %r14,%rdx 13e3: 4c 89 ee mov %r13,%rsi 13e6: 44 89 e7 mov %r12d,%edi 13e9: 41 ff 14 df callq *(%r15,%rbx,8) 13ed: 48 83 c3 01 add $0x1,%rbx 13f1: 48 39 dd cmp %rbx,%rbp 13f4: 75 ea jne 13e0 <__libc_csu_init+0x40> 13f6: 48 83 c4 08 add $0x8,%rsp 13fa: 5b pop %rbx 13fb: 5d pop %rbp 13fc: 41 5c pop %r12 13fe: 41 5d pop %r13 1400: 41 5e pop %r14 1402: 41 5f pop %r15 1404: c3 retq 1405: 66 66 2e 0f 1f 84 00 data16 nopw %cs:0x0(%rax,%rax,1) 140c: 00 00 00 00 0000000000001410 <__libc_csu_fini>: 1410: f3 0f 1e fa endbr64 1414: c3 retq Disassembly of section .fini: 0000000000001418 <_fini>: 1418: f3 0f 1e fa endbr64 141c: 48 83 ec 08 sub $0x8,%rsp 1420: 48 83 c4 08 add $0x8,%rsp 1424: c3 retq

局部对象的构造和析构

首先我们找到main函数的反汇编代码:

00000000000011e9 <main>:
    11e9:       f3 0f 1e fa             endbr64 
    11ed:       55                      push   %rbp
    11ee:       48 89 e5                mov    %rsp,%rbp
    11f1:       48 83 ec 10             sub    $0x10,%rsp
    11f5:       64 48 8b 04 25 28 00    mov    %fs:0x28,%rax
    11fc:       00 00 
    11fe:       48 89 45 f8             mov    %rax,-0x8(%rbp)
    1202:       31 c0                   xor    %eax,%eax
    1204:       48 8d 45 f4             lea    -0xc(%rbp),%rax
    1208:       be 02 00 00 00          mov    $0x2,%esi
    120d:       48 89 c7                mov    %rax,%rdi
    1210:       e8 e7 00 00 00          callq  12fc <_ZN6ObjectC1Ei>
    1215:       48 8d 45 f4             lea    -0xc(%rbp),%rax
    1219:       48 89 c7                mov    %rax,%rdi
    121c:       e8 35 01 00 00          callq  1356 <_ZN6ObjectD1Ev>
    1221:       b8 00 00 00 00          mov    $0x0,%eax
    1226:       48 8b 55 f8             mov    -0x8(%rbp),%rdx
    122a:       64 48 33 14 25 28 00    xor    %fs:0x28,%rdx
    1231:       00 00 
    1233:       74 05                   je     123a <main+0x51>
    1235:       e8 96 fe ff ff          callq  10d0 <__stack_chk_fail@plt>
    123a:       c9                      leaveq 
    123b:       c3                      retq   
从main函数的反汇编代码中,我们可以看出,在main函数只构造了o2这一个对象,o2的构造函数被命名为 _ZN6ObjectC1Ei,析构函数被命名为 _ZN6ObjectD1Ev。

第10行,将对象的地址传递给rax寄存器。

第11行,将括号中的参数传递给寄存器esi。

第12行,将rax寄存器的地址传递给隐藏参数&obj(this指针)。

在第16行,调用析构函数,释放函数占用的资源。

构造函数:

00000000000012fc <_ZN6ObjectC1Ei>:
    12fc:       f3 0f 1e fa             endbr64 
    1300:       55                      push   %rbp
    1301:       48 89 e5                mov    %rsp,%rbp
    1304:       48 83 ec 10             sub    $0x10,%rsp
    1308:       48 89 7d f8             mov    %rdi,-0x8(%rbp)
    130c:       89 75 f4                mov    %esi,-0xc(%rbp)
    130f:       48 8b 45 f8             mo
首页 上一页 1 2 3 4 5 6 7 下一页 尾页 4/7/7
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇从零实现俄罗斯方块(c语言+思路.. 下一篇C++指针【cherno课程学习】

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目