a.out: file format elf64-x86-64 ================================================================== 0000000000400ac6
: int main() try { 400ac6: 55 push %rbp 400ac7: 48 89 e5 mov %rsp,%rbp 400aca: 41 56 push %r14 400acc: 41 55 push %r13 400ace: 41 54 push %r12 400ad0: 53 push %rbx 400ad1: 48 83 ec 10 sub $0x10,%rsp std::cout << "=== Before init\n"; 400ad5: be b7 0d 40 00 mov $0x400db7,%esi 400ada: bf 00 13 60 00 mov $0x601300,%edi 400adf: e8 6c fe ff ff callq 400950 <_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@plt> T *ptr = new T[10]; // T() will throw 400ae4: bf 12 00 00 00 mov $0x12,%edi 400ae9: e8 12 fe ff ff callq 400900 <_Znam@plt> operator new 400aee: 49 89 c4 mov %rax,%r12 400af1: 49 c7 04 24 0a 00 00 movq $0xa,(%r12) 400af8: 00 400af9: 49 8d 5c 24 08 lea 0x8(%r12),%rbx 400afe: 41 bd 09 00 00 00 mov $0x9,%r13d 400b04: 49 89 de mov %rbx,%r14 400b07: eb 10 jmp 400b19 400b09: 4c 89 f7 mov %r14,%rdi 400b0c: e8 55 01 00 00 callq 400c66 <_ZN1TC1Ev> T::T() 400b11: 49 83 c6 01 add $0x1,%r14 400b15: 49 83 ed 01 sub $0x1,%r13 400b19: 49 83 fd ff cmp $0xffffffffffffffff,%r13 400b1d: 75 ea jne 400b09 400b1f: 49 8d 44 24 08 lea 0x8(%r12),%rax 400b24: 48 89 45 d8 mov %rax,-0x28(%rbp) std::cout << "=== After init\n"; 400b28: be c8 0d 40 00 mov $0x400dc8,%esi 400b2d: bf 00 13 60 00 mov $0x601300,%edi 400b32: e8 19 fe ff ff callq 400950 <_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@plt> delete[] ptr; 400b37: 48 83 7d d8 00 cmpq $0x0,-0x28(%rbp) 400b3c: 74 37 je 400b75 return 0; 400b3e: 48 8b 45 d8 mov -0x28(%rbp),%rax 400b42: 48 83 e8 08 sub $0x8,%rax 400b46: 48 8b 10 mov (%rax),%rdx 400b49: 48 8b 45 d8 mov -0x28(%rbp),%rax 400b4d: 48 8d 1c 02 lea (%rdx,%rax,1),%rbx 400b51: 48 3b 5d d8 cmp -0x28(%rbp),%rbx 400b55: 74 0e je 400b65 400b57: 48 83 eb 01 sub $0x1,%rbx 400b5b: 48 89 df mov %rbx,%rdi 400b5e: e8 7f 01 00 00 callq 400ce2 <_ZN1TD1Ev> T::~T() 400b63: eb ec jmp 400b51 400b65: 48 8b 45 d8 mov -0x28(%rbp),%rax 400b69: 48 83 e8 08 sub $0x8,%rax 400b6d: 48 89 c7 mov %rax,%rdi 400b70: e8 fb fd ff ff callq 400970 <_ZdaPv@plt> operator delete } 400b75: b8 00 00 00 00 mov $0x0,%eax 400b7a: e9 88 00 00 00 jmpq 400c07 goto main_end exception_exit? 400b7f: 49 89 c6 mov %rax,%r14 400b82: 48 85 db test %rbx,%rbx 400b85: 74 1f je 400ba6 400b87: b8 09 00 00 00 mov $0x9,%eax 400b8c: 4c 29 e8 sub %r13,%rax 400b8f: 4c 8d 2c 03 lea (%rbx,%rax,1),%r13 400b93: 49 39 dd cmp %rbx,%r13 400b96: 74 0e je 400ba6 400b98: 49 83 ed 01 sub $0x1,%r13 400b9c: 4c 89 ef mov %r13,%rdi 400b9f: e8 3e 01 00 00 callq 400ce2 <_ZN1TD1Ev> T::~T() 400ba4: eb ed jmp 400b93 400ba6: 4c 89 f3 mov %r14,%rbx 400ba9: 4c 89 e7 mov %r12,%rdi 400bac: e8 bf fd ff ff callq 400970 <_ZdaPv@plt> operator delete 400bb1: 48 89 d8 mov %rbx,%rax 400bb4: eb 13 jmp 400bc9 catch(...) { 400bb9: e8 d2 fd ff ff callq 400990 <__cxa_end_catch@plt> 400bbe: 48 89 d8 mov %rbx,%rax 400bc1: 48 89 c7 mov %rax,%rdi 400bc4: e8 f7 fd ff ff callq 4009c0 <_Unwind_Resume@plt> 400bc9: 48 89 c7 mov %rax,%rdi 400bcc: e8 cf fd ff ff callq 4009a0 <__cxa_begin_catch@plt> std::cout << "=== Exception: object count = " << T::count << "\n"; 400bd1: 8b 1d 7d 08 20 00 mov 0x20087d(%rip),%ebx # 601454 <_ZN1T5countE> 400bd7: be d8 0d 40 00 mov $0x400dd8,%esi 400bdc: bf 00 13 60 00 mov $0x601300,%edi 400be1: e8 6a fd ff ff callq 400950 <_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@plt> 400be6: 89 de mov %ebx,%esi 400be8: 48 89 c7 mov %rax,%rdi 400beb: e8 f0 fc ff ff callq 4008e0 <_ZNSolsEi@plt> 400bf0: be af 0d 40 00 mov $0x400daf,%esi 400bf5: 48 89 c7 mov %rax,%rdi 400bf8: e8 53 fd ff ff callq 400950 <_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@plt> 400bfd: e8 8e fd ff ff callq 400990 <__cxa_end_catch@plt> 400c02: e9 6e ff ff ff jmpq 400b75 return 0; } // end of catch main_end: 400c07: 48 83 c4 10 add $0x10,%rsp 400c0b: 5b pop %rbx 400c0c: 41 5c pop %r12 400c0e: 41 5d pop %r13 400c10: 41 5e pop %r14 400c12: 5d pop %rbp 400c13: c3 retq ================================================================== 0000000000400c66 <_ZN1TC1Ev>: T::T() { 400c66: 55 push %rbp 400c67: 48 89 e5 mov %rsp,%rbp 400c6a: 53 push %rbx 400c6b: 48 83 ec 18 sub $0x18,%rsp 400c6f: 48 89 7d e8 mov %rdi,-0x18(%rbp) if(count>=MAX) throw 1; 400c73: 8b 05 db 07 20 00 mov 0x2007db(%rip),%eax # 601454 <_ZN1T5countE> 400c79: 83 f8 02 cmp $0x2,%eax 400c7c: 7e 22 jle 400ca0 <_ZN1TC1Ev+0x3a> 400c7e: bf 04 00 00 00 mov $0x4,%edi 400c83: e8 d8 fc ff ff callq 400960 <__cxa_allocate_exception@plt> 400c88: c7 00 01 00 00 00 movl $0x1,(%rax) 400c8e: ba 00 00 00 00 mov $0x0,%edx 400c93: be 40 14 60 00 mov $0x601440,%esi 400c98: 48 89 c7 mov %rax,%rdi 400c9b: e8 e0 fc ff ff callq 400980 <__cxa_throw@plt> ++count; 400ca0: 8b 05 ae 07 20 00 mov 0x2007ae(%rip),%eax # 601454 <_ZN1T5countE> 400ca6: 83 c0 01 add $0x1,%eax 400ca9: 89 05 a5 07 20 00 mov %eax,0x2007a5(%rip) # 601454 <_ZN1T5countE> std::cout << "T() object count = " << count <<"\n"; 400caf: 8b 1d 9f 07 20 00 mov 0x20079f(%rip),%ebx # 601454 <_ZN1T5countE> 400cb5: be 98 0d 40 00 mov $0x400d98,%esi 400cba: bf 00 13 60 00 mov $0x601300,%edi 400cbf: e8 8c fc ff ff callq 400950 <_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@plt> 400cc4: 89 de mov %ebx,%esi 400cc6: 48 89 c7 mov %rax,%rdi 400cc9: e8 12 fc ff ff callq 4008e0 <_ZNSolsEi@plt> 400cce: be af 0d 40 00 mov $0x400daf,%esi 400cd3: 48 89 c7 mov %rax,%rdi 400cd6: e8 75 fc ff ff callq 400950 <_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@plt> } 400cdb: 48 83 c4 18 add $0x18,%rsp 400cdf: 5b pop %rbx 400ce0: 5d pop %rbp 400ce1: c3 retq ================================================================== 0000000000400ce2 <_ZN1TD1Ev>: ~T() { 400ce2: 55 push %rbp 400ce3: 48 89 e5 mov %rsp,%rbp 400ce6: 48 83 ec 10 sub $0x10,%rsp 400cea: 48 89 7d f8 mov %rdi,-0x8(%rbp) std::cout << "~T()\n"; 400cee: be b1 0d 40 00 mov $0x400db1,%esi 400cf3: bf 00 13 60 00 mov $0x601300,%edi 400cf8: e8 53 fc ff ff callq 400950 <_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@plt> --count; 400cfd: 8b 05 51 07 20 00 mov 0x200751(%rip),%eax # 601454 <_ZN1T5countE> 400d03: 83 e8 01 sub $0x1,%eax 400d06: 89 05 48 07 20 00 mov %eax,0x200748(%rip) # 601454 <_ZN1T5countE> } 400d0c: c9 leaveq 400d0d: c3 retq ==================================================================