Tags
//let's define a single hello.cpp file to see how the compiled code looks like #include <iostream> using namespace std; int main() { int i=2; int j=3; int c = i+j; }
//compiled file //g++ -S -o hello.s hello.cpp .file "hello.cpp" .local _ZStL8__ioinit .comm _ZStL8__ioinit,1,1 .text .globl main .type main, @function main: .LFB966: .cfi_startproc pushl %ebp .cfi_def_cfa_offset 8 .cfi_offset 5, -8 movl %esp, %ebp .cfi_def_cfa_register 5 subl $16, %esp movl $2, -12(%ebp) movl $3, -8(%ebp) movl -8(%ebp), %eax movl -12(%ebp), %edx addl %edx, %eax movl %eax, -4(%ebp) movl $0, %eax leave .cfi_restore 5 .cfi_def_cfa 4, 4 ret .cfi_endproc .LFE966: .size main, .-main .type _Z41__static_initialization_and_destruction_0ii, @function _Z41__static_initialization_and_destruction_0ii: .LFB967: .cfi_startproc pushl %ebp .cfi_def_cfa_offset 8 .cfi_offset 5, -8 movl %esp, %ebp .cfi_def_cfa_register 5 subl $24, %esp cmpl $1, 8(%ebp) jne .L2 cmpl $65535, 12(%ebp) jne .L2 movl $_ZStL8__ioinit, (%esp) call _ZNSt8ios_base4InitC1Ev movl $_ZNSt8ios_base4InitD1Ev, %eax movl $__dso_handle, 8(%esp) movl $_ZStL8__ioinit, 4(%esp) movl %eax, (%esp) call __cxa_atexit .L2: leave .cfi_restore 5 .cfi_def_cfa 4, 4 ret .cfi_endproc .LFE967: .size _Z41__static_initialization_and_destruction_0ii, .-_Z41__static_initialization_and_destruction_0ii .type _GLOBAL__sub_I_main, @function _GLOBAL__sub_I_main: .LFB968: .cfi_startproc pushl %ebp .cfi_def_cfa_offset 8 .cfi_offset 5, -8 movl %esp, %ebp .cfi_def_cfa_register 5 subl $24, %esp movl $65535, 4(%esp) movl $1, (%esp) call _Z41__static_initialization_and_destruction_0ii leave .cfi_restore 5 .cfi_def_cfa 4, 4 ret .cfi_endproc .LFE968: .size _GLOBAL__sub_I_main, .-_GLOBAL__sub_I_main .section .ctors,"aw",@progbits .align 4 .long _GLOBAL__sub_I_main .weakref _ZL20__gthrw_pthread_oncePiPFvvE,pthread_once .weakref _ZL27__gthrw_pthread_getspecificj,pthread_getspecific .weakref _ZL27__gthrw_pthread_setspecificjPKv,pthread_setspecific .weakref _ZL22__gthrw_pthread_createPmPK14pthread_attr_tPFPvS3_ES3_,pthread_create .weakref _ZL20__gthrw_pthread_joinmPPv,pthread_join .weakref _ZL21__gthrw_pthread_equalmm,pthread_equal .weakref _ZL20__gthrw_pthread_selfv,pthread_self .weakref _ZL22__gthrw_pthread_detachm,pthread_detach .weakref _ZL22__gthrw_pthread_cancelm,pthread_cancel .weakref _ZL19__gthrw_sched_yieldv,sched_yield .weakref _ZL26__gthrw_pthread_mutex_lockP15pthread_mutex_t,pthread_mutex_lock .weakref _ZL29__gthrw_pthread_mutex_trylockP15pthread_mutex_t,pthread_mutex_trylock .weakref _ZL31__gthrw_pthread_mutex_timedlockP15pthread_mutex_tPK8timespec,pthread_mutex_timedlock .weakref _ZL28__gthrw_pthread_mutex_unlockP15pthread_mutex_t,pthread_mutex_unlock .weakref _ZL26__gthrw_pthread_mutex_initP15pthread_mutex_tPK19pthread_mutexattr_t,pthread_mutex_init .weakref _ZL29__gthrw_pthread_mutex_destroyP15pthread_mutex_t,pthread_mutex_destroy .weakref _ZL30__gthrw_pthread_cond_broadcastP14pthread_cond_t,pthread_cond_broadcast .weakref _ZL27__gthrw_pthread_cond_signalP14pthread_cond_t,pthread_cond_signal .weakref _ZL25__gthrw_pthread_cond_waitP14pthread_cond_tP15pthread_mutex_t,pthread_cond_wait .weakref _ZL30__gthrw_pthread_cond_timedwaitP14pthread_cond_tP15pthread_mutex_tPK8timespec,pthread_cond_timedwait .weakref _ZL28__gthrw_pthread_cond_destroyP14pthread_cond_t,pthread_cond_destroy .weakref _ZL26__gthrw_pthread_key_createPjPFvPvE,pthread_key_create .weakref _ZL26__gthrw_pthread_key_deletej,pthread_key_delete .weakref _ZL30__gthrw_pthread_mutexattr_initP19pthread_mutexattr_t,pthread_mutexattr_init .weakref _ZL33__gthrw_pthread_mutexattr_settypeP19pthread_mutexattr_ti,pthread_mutexattr_settype .weakref _ZL33__gthrw_pthread_mutexattr_destroyP19pthread_mutexattr_t,pthread_mutexattr_destroy .ident "GCC: (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3" .section .note.GNU-stack,"",@progbits
//let's change it further to test //mult.h #include <iostream> using namespace std; int multi(int a, int b);
//mult.cpp #include "mult.h" int multi(int a, int b) { return a*b; }
//hello.cpp #include <iostream> #include "mult.h" using namespace std; int Add(int a, int b) { return a+b; } int main() { int i=5; int j=6; int d = Add(i,j); int e = multi(i,j); int c = d+e; cout << "c is " << c << endl; }
//g++ -S -o mult.s mult.cpp .file "mult.cpp" .local _ZStL8__ioinit .comm _ZStL8__ioinit,1,1 .text .globl _Z5multiii .type _Z5multiii, @function _Z5multiii: .LFB966: .cfi_startproc pushl %ebp .cfi_def_cfa_offset 8 .cfi_offset 5, -8 movl %esp, %ebp .cfi_def_cfa_register 5 movl 8(%ebp), %eax imull 12(%ebp), %eax popl %ebp .cfi_def_cfa 4, 4 .cfi_restore 5 ret .cfi_endproc .LFE966: .size _Z5multiii, .-_Z5multiii .type _Z41__static_initialization_and_destruction_0ii, @function _Z41__static_initialization_and_destruction_0ii: .LFB967: .cfi_startproc pushl %ebp .cfi_def_cfa_offset 8 .cfi_offset 5, -8 movl %esp, %ebp .cfi_def_cfa_register 5 subl $24, %esp cmpl $1, 8(%ebp) jne .L2 cmpl $65535, 12(%ebp) jne .L2 movl $_ZStL8__ioinit, (%esp) call _ZNSt8ios_base4InitC1Ev movl $_ZNSt8ios_base4InitD1Ev, %eax movl $__dso_handle, 8(%esp) movl $_ZStL8__ioinit, 4(%esp) movl %eax, (%esp) call __cxa_atexit .L2: leave .cfi_restore 5 .cfi_def_cfa 4, 4 ret .cfi_endproc .LFE967: .size _Z41__static_initialization_and_destruction_0ii, .-_Z41__static_initialization_and_destruction_0ii .type _GLOBAL__sub_I__Z5multiii, @function _GLOBAL__sub_I__Z5multiii: .LFB968: .cfi_startproc pushl %ebp .cfi_def_cfa_offset 8 .cfi_offset 5, -8 movl %esp, %ebp .cfi_def_cfa_register 5 subl $24, %esp movl $65535, 4(%esp) movl $1, (%esp) call _Z41__static_initialization_and_destruction_0ii leave .cfi_restore 5 .cfi_def_cfa 4, 4 ret .cfi_endproc .LFE968: .size _GLOBAL__sub_I__Z5multiii, .-_GLOBAL__sub_I__Z5multiii .section .ctors,"aw",@progbits .align 4 .long _GLOBAL__sub_I__Z5multiii .weakref _ZL20__gthrw_pthread_oncePiPFvvE,pthread_once .weakref _ZL27__gthrw_pthread_getspecificj,pthread_getspecific .weakref _ZL27__gthrw_pthread_setspecificjPKv,pthread_setspecific .weakref _ZL22__gthrw_pthread_createPmPK14pthread_attr_tPFPvS3_ES3_,pthread_create .weakref _ZL20__gthrw_pthread_joinmPPv,pthread_join .weakref _ZL21__gthrw_pthread_equalmm,pthread_equal .weakref _ZL20__gthrw_pthread_selfv,pthread_self .weakref _ZL22__gthrw_pthread_detachm,pthread_detach .weakref _ZL22__gthrw_pthread_cancelm,pthread_cancel .weakref _ZL19__gthrw_sched_yieldv,sched_yield .weakref _ZL26__gthrw_pthread_mutex_lockP15pthread_mutex_t,pthread_mutex_lock .weakref _ZL29__gthrw_pthread_mutex_trylockP15pthread_mutex_t,pthread_mutex_trylock .weakref _ZL31__gthrw_pthread_mutex_timedlockP15pthread_mutex_tPK8timespec,pthread_mutex_timedlock .weakref _ZL28__gthrw_pthread_mutex_unlockP15pthread_mutex_t,pthread_mutex_unlock .weakref _ZL26__gthrw_pthread_mutex_initP15pthread_mutex_tPK19pthread_mutexattr_t,pthread_mutex_init .weakref _ZL29__gthrw_pthread_mutex_destroyP15pthread_mutex_t,pthread_mutex_destroy .weakref _ZL30__gthrw_pthread_cond_broadcastP14pthread_cond_t,pthread_cond_broadcast .weakref _ZL27__gthrw_pthread_cond_signalP14pthread_cond_t,pthread_cond_signal .weakref _ZL25__gthrw_pthread_cond_waitP14pthread_cond_tP15pthread_mutex_t,pthread_cond_wait .weakref _ZL30__gthrw_pthread_cond_timedwaitP14pthread_cond_tP15pthread_mutex_tPK8timespec,pthread_cond_timedwait .weakref _ZL28__gthrw_pthread_cond_destroyP14pthread_cond_t,pthread_cond_destroy .weakref _ZL26__gthrw_pthread_key_createPjPFvPvE,pthread_key_create .weakref _ZL26__gthrw_pthread_key_deletej,pthread_key_delete .weakref _ZL30__gthrw_pthread_mutexattr_initP19pthread_mutexattr_t,pthread_mutexattr_init .weakref _ZL33__gthrw_pthread_mutexattr_settypeP19pthread_mutexattr_ti,pthread_mutexattr_settype .weakref _ZL33__gthrw_pthread_mutexattr_destroyP19pthread_mutexattr_t,pthread_mutexattr_destroy .ident "GCC: (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3" .section .note.GNU-stack,"",@progbits
////g++ -S -o hello.s hello.cpp .file "hello.cpp" .local _ZStL8__ioinit .comm _ZStL8__ioinit,1,1 .text .globl _Z3Addii .type _Z3Addii, @function _Z3Addii: .LFB966: .cfi_startproc pushl %ebp .cfi_def_cfa_offset 8 .cfi_offset 5, -8 movl %esp, %ebp .cfi_def_cfa_register 5 movl 12(%ebp), %eax movl 8(%ebp), %edx addl %edx, %eax popl %ebp .cfi_def_cfa 4, 4 .cfi_restore 5 ret .cfi_endproc .LFE966: .size _Z3Addii, .-_Z3Addii .section .rodata .LC0: .string "c is " .text .globl main .type main, @function main: .LFB967: .cfi_startproc pushl %ebp .cfi_def_cfa_offset 8 .cfi_offset 5, -8 movl %esp, %ebp .cfi_def_cfa_register 5 andl $-16, %esp subl $48, %esp movl $5, 28(%esp) movl $6, 32(%esp) movl 32(%esp), %eax movl %eax, 4(%esp) movl 28(%esp), %eax movl %eax, (%esp) call _Z3Addii movl %eax, 36(%esp) movl 32(%esp), %eax movl %eax, 4(%esp) movl 28(%esp), %eax movl %eax, (%esp) call _Z5multiii movl %eax, 40(%esp) movl 40(%esp), %eax movl 36(%esp), %edx addl %edx, %eax movl %eax, 44(%esp) movl $.LC0, 4(%esp) movl $_ZSt4cout, (%esp) call _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc movl 44(%esp), %edx movl %edx, 4(%esp) movl %eax, (%esp) call _ZNSolsEi movl $_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_, 4(%esp) movl %eax, (%esp) call _ZNSolsEPFRSoS_E movl $0, %eax leave .cfi_restore 5 .cfi_def_cfa 4, 4 ret .cfi_endproc .LFE967: .size main, .-main .type _Z41__static_initialization_and_destruction_0ii, @function _Z41__static_initialization_and_destruction_0ii: .LFB976: .cfi_startproc pushl %ebp .cfi_def_cfa_offset 8 .cfi_offset 5, -8 movl %esp, %ebp .cfi_def_cfa_register 5 subl $24, %esp cmpl $1, 8(%ebp) jne .L3 cmpl $65535, 12(%ebp) jne .L3 movl $_ZStL8__ioinit, (%esp) call _ZNSt8ios_base4InitC1Ev movl $_ZNSt8ios_base4InitD1Ev, %eax movl $__dso_handle, 8(%esp) movl $_ZStL8__ioinit, 4(%esp) movl %eax, (%esp) call __cxa_atexit .L3: leave .cfi_restore 5 .cfi_def_cfa 4, 4 ret .cfi_endproc .LFE976: .size _Z41__static_initialization_and_destruction_0ii, .-_Z41__static_initialization_and_destruction_0ii .type _GLOBAL__sub_I__Z3Addii, @function _GLOBAL__sub_I__Z3Addii: .LFB977: .cfi_startproc pushl %ebp .cfi_def_cfa_offset 8 .cfi_offset 5, -8 movl %esp, %ebp .cfi_def_cfa_register 5 subl $24, %esp movl $65535, 4(%esp) movl $1, (%esp) call _Z41__static_initialization_and_destruction_0ii leave .cfi_restore 5 .cfi_def_cfa 4, 4 ret .cfi_endproc .LFE977: .size _GLOBAL__sub_I__Z3Addii, .-_GLOBAL__sub_I__Z3Addii .section .ctors,"aw",@progbits .align 4 .long _GLOBAL__sub_I__Z3Addii .weakref _ZL20__gthrw_pthread_oncePiPFvvE,pthread_once .weakref _ZL27__gthrw_pthread_getspecificj,pthread_getspecific .weakref _ZL27__gthrw_pthread_setspecificjPKv,pthread_setspecific .weakref _ZL22__gthrw_pthread_createPmPK14pthread_attr_tPFPvS3_ES3_,pthread_create .weakref _ZL20__gthrw_pthread_joinmPPv,pthread_join .weakref _ZL21__gthrw_pthread_equalmm,pthread_equal .weakref _ZL20__gthrw_pthread_selfv,pthread_self .weakref _ZL22__gthrw_pthread_detachm,pthread_detach .weakref _ZL22__gthrw_pthread_cancelm,pthread_cancel .weakref _ZL19__gthrw_sched_yieldv,sched_yield .weakref _ZL26__gthrw_pthread_mutex_lockP15pthread_mutex_t,pthread_mutex_lock .weakref _ZL29__gthrw_pthread_mutex_trylockP15pthread_mutex_t,pthread_mutex_trylock .weakref _ZL31__gthrw_pthread_mutex_timedlockP15pthread_mutex_tPK8timespec,pthread_mutex_timedlock .weakref _ZL28__gthrw_pthread_mutex_unlockP15pthread_mutex_t,pthread_mutex_unlock .weakref _ZL26__gthrw_pthread_mutex_initP15pthread_mutex_tPK19pthread_mutexattr_t,pthread_mutex_init .weakref _ZL29__gthrw_pthread_mutex_destroyP15pthread_mutex_t,pthread_mutex_destroy .weakref _ZL30__gthrw_pthread_cond_broadcastP14pthread_cond_t,pthread_cond_broadcast .weakref _ZL27__gthrw_pthread_cond_signalP14pthread_cond_t,pthread_cond_signal .weakref _ZL25__gthrw_pthread_cond_waitP14pthread_cond_tP15pthread_mutex_t,pthread_cond_wait .weakref _ZL30__gthrw_pthread_cond_timedwaitP14pthread_cond_tP15pthread_mutex_tPK8timespec,pthread_cond_timedwait .weakref _ZL28__gthrw_pthread_cond_destroyP14pthread_cond_t,pthread_cond_destroy .weakref _ZL26__gthrw_pthread_key_createPjPFvPvE,pthread_key_create .weakref _ZL26__gthrw_pthread_key_deletej,pthread_key_delete .weakref _ZL30__gthrw_pthread_mutexattr_initP19pthread_mutexattr_t,pthread_mutexattr_init .weakref _ZL33__gthrw_pthread_mutexattr_settypeP19pthread_mutexattr_ti,pthread_mutexattr_settype .weakref _ZL33__gthrw_pthread_mutexattr_destroyP19pthread_mutexattr_t,pthread_mutexattr_destroy .ident "GCC: (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3" .section .note.GNU-stack,"",@progbits
//finally, let's dump the object file to see the assembly, you could see that we have real address here! //g++ -o hello mult.cpp hello.cpp //objdump -d hello.o >dump.txt hello.o: file format elf32-i386 Disassembly of section .text: 00000000 <main>: 0: 55 push %ebp 1: 89 e5 mov %esp,%ebp 3: 83 ec 10 sub $0x10,%esp 6: c7 45 f4 02 00 00 00 movl $0x2,-0xc(%ebp) d: c7 45 f8 03 00 00 00 movl $0x3,-0x8(%ebp) 14: 8b 45 f8 mov -0x8(%ebp),%eax 17: 8b 55 f4 mov -0xc(%ebp),%edx 1a: 01 d0 add %edx,%eax 1c: 89 45 fc mov %eax,-0x4(%ebp) 1f: b8 00 00 00 00 mov $0x0,%eax 24: c9 leave 25: c3 ret 00000026 <_Z41__static_initialization_and_destruction_0ii>: 26: 55 push %ebp 27: 89 e5 mov %esp,%ebp 29: 83 ec 18 sub $0x18,%esp 2c: 83 7d 08 01 cmpl $0x1,0x8(%ebp) 30: 75 32 jne 64 <_Z41__static_initialization_and_destruction_0ii+0x3e> 32: 81 7d 0c ff ff 00 00 cmpl $0xffff,0xc(%ebp) 39: 75 29 jne 64 <_Z41__static_initialization_and_destruction_0ii+0x3e> 3b: c7 04 24 00 00 00 00 movl $0x0,(%esp) 42: e8 fc ff ff ff call 43 <_Z41__static_initialization_and_destruction_0ii+0x1d> 47: b8 00 00 00 00 mov $0x0,%eax 4c: c7 44 24 08 00 00 00 movl $0x0,0x8(%esp) 53: 00 54: c7 44 24 04 00 00 00 movl $0x0,0x4(%esp) 5b: 00 5c: 89 04 24 mov %eax,(%esp) 5f: e8 fc ff ff ff call 60 <_Z41__static_initialization_and_destruction_0ii+0x3a> 64: c9 leave 65: c3 ret 00000066 <_GLOBAL__sub_I_main>: 66: 55 push %ebp 67: 89 e5 mov %esp,%ebp 69: 83 ec 18 sub $0x18,%esp 6c: c7 44 24 04 ff ff 00 movl $0xffff,0x4(%esp) 73: 00 74: c7 04 24 01 00 00 00 movl $0x1,(%esp) 7b: e8 a6 ff ff ff call 26 <_Z41__static_initialization_and_destruction_0ii> 80: c9 leave 81: c3 ret
//if we are interested in mult.o, we can: //g++ -g -c mult.cpp -o mult.o //objdump -d mult.o >mult.txt mult.o: file format elf32-i386 Disassembly of section .text: 00000000 <_Z5multiii>: 0: 55 push %ebp 1: 89 e5 mov %esp,%ebp 3: 8b 45 08 mov 0x8(%ebp),%eax 6: 0f af 45 0c imul 0xc(%ebp),%eax a: 5d pop %ebp b: c3 ret 0000000c <_Z41__static_initialization_and_destruction_0ii>: c: 55 push %ebp d: 89 e5 mov %esp,%ebp f: 83 ec 18 sub $0x18,%esp 12: 83 7d 08 01 cmpl $0x1,0x8(%ebp) 16: 75 32 jne 4a <_Z41__static_initialization_and_destruction_0ii+0x3e> 18: 81 7d 0c ff ff 00 00 cmpl $0xffff,0xc(%ebp) 1f: 75 29 jne 4a <_Z41__static_initialization_and_destruction_0ii+0x3e> 21: c7 04 24 00 00 00 00 movl $0x0,(%esp) 28: e8 fc ff ff ff call 29 <_Z41__static_initialization_and_destruction_0ii+0x1d> 2d: b8 00 00 00 00 mov $0x0,%eax 32: c7 44 24 08 00 00 00 movl $0x0,0x8(%esp) 39: 00 3a: c7 44 24 04 00 00 00 movl $0x0,0x4(%esp) 41: 00 42: 89 04 24 mov %eax,(%esp) 45: e8 fc ff ff ff call 46 <_Z41__static_initialization_and_destruction_0ii+0x3a> 4a: c9 leave 4b: c3 ret 0000004c <_GLOBAL__sub_I__Z5multiii>: 4c: 55 push %ebp 4d: 89 e5 mov %esp,%ebp 4f: 83 ec 18 sub $0x18,%esp 52: c7 44 24 04 ff ff 00 movl $0xffff,0x4(%esp) 59: 00 5a: c7 04 24 01 00 00 00 movl $0x1,(%esp) 61: e8 a6 ff ff ff call c <_Z41__static_initialization_and_destruction_0ii> 66: c9 leave 67: c3 ret
//what if we only create object from hello.cpp? //you will see this is different w/ the hello.o which is final file from both mult.cpp and hello.cpp // g++ -g -c hello.cpp -o hello.o // objdump -d hello.o >hello.txt hello.o: file format elf32-i386 Disassembly of section .text: 00000000 : 0: 55 push %ebp 1: 89 e5 mov %esp,%ebp 3: 8b 45 0c mov 0xc(%ebp),%eax 6: 8b 55 08 mov 0x8(%ebp),%edx 9: 01 d0 add %edx,%eax b: 5d pop %ebp c: c3 ret 0000000d : d: 55 push %ebp e: 89 e5 mov %esp,%ebp 10: 83 e4 f0 and $0xfffffff0,%esp 13: 83 ec 30 sub $0x30,%esp 16: c7 44 24 1c 05 00 00 movl $0x5,0x1c(%esp) 1d: 00 1e: c7 44 24 20 06 00 00 movl $0x6,0x20(%esp) 25: 00 26: 8b 44 24 20 mov 0x20(%esp),%eax 2a: 89 44 24 04 mov %eax,0x4(%esp) 2e: 8b 44 24 1c mov 0x1c(%esp),%eax 32: 89 04 24 mov %eax,(%esp) 35: e8 fc ff ff ff call 36 3a: 89 44 24 24 mov %eax,0x24(%esp) 3e: 8b 44 24 20 mov 0x20(%esp),%eax 42: 89 44 24 04 mov %eax,0x4(%esp) 46: 8b 44 24 1c mov 0x1c(%esp),%eax 4a: 89 04 24 mov %eax,(%esp) 4d: e8 fc ff ff ff call 4e 52: 89 44 24 28 mov %eax,0x28(%esp) 56: 8b 44 24 28 mov 0x28(%esp),%eax 5a: 8b 54 24 24 mov 0x24(%esp),%edx 5e: 01 d0 add %edx,%eax 60: 89 44 24 2c mov %eax,0x2c(%esp) 64: c7 44 24 04 00 00 00 movl $0x0,0x4(%esp) 6b: 00 6c: c7 04 24 00 00 00 00 movl $0x0,(%esp) 73: e8 fc ff ff ff call 74 78: 8b 54 24 2c mov 0x2c(%esp),%edx 7c: 89 54 24 04 mov %edx,0x4(%esp) 80: 89 04 24 mov %eax,(%esp) 83: e8 fc ff ff ff call 84 88: c7 44 24 04 00 00 00 movl $0x0,0x4(%esp) 8f: 00 90: 89 04 24 mov %eax,(%esp) 93: e8 fc ff ff ff call 94 98: b8 00 00 00 00 mov $0x0,%eax 9d: c9 leave 9e: c3 ret 0000009f : 9f: 55 push %ebp a0: 89 e5 mov %esp,%ebp a2: 83 ec 18 sub $0x18,%esp a5: 83 7d 08 01 cmpl $0x1,0x8(%ebp) a9: 75 32 jne dd ab: 81 7d 0c ff ff 00 00 cmpl $0xffff,0xc(%ebp) b2: 75 29 jne dd b4: c7 04 24 00 00 00 00 movl $0x0,(%esp) bb: e8 fc ff ff ff call bc c0: b8 00 00 00 00 mov $0x0,%eax c5: c7 44 24 08 00 00 00 movl $0x0,0x8(%esp) cc: 00 cd: c7 44 24 04 00 00 00 movl $0x0,0x4(%esp) d4: 00 d5: 89 04 24 mov %eax,(%esp) d8: e8 fc ff ff ff call d9 dd: c9 leave de: c3 ret 000000df : df: 55 push %ebp e0: 89 e5 mov %esp,%ebp e2: 83 ec 18 sub $0x18,%esp e5: c7 44 24 04 ff ff 00 movl $0xffff,0x4(%esp) ec: 00 ed: c7 04 24 01 00 00 00 movl $0x1,(%esp) f4: e8 a6 ff ff ff call 9f f9: c9 leave fa: c3 ret