C code:
#include// change no's type from int to long long long long func(long long no) { return no + 1; } int main(int argc, const char *argv[]) { int i; i = 100; func(i); return 0; }
Run 'gcc -g' to compile it. Then run 'objdump -S a.out' produce:
a.out: file format elf32-i386 Disassembly of section .init: 08048298 <_init>: 8048298: 55 push %ebp 8048299: 89 e5 mov %esp,%ebp 804829b: 53 push %ebx 804829c: 83 ec 04 sub $0x4,%esp 804829f: e8 00 00 00 00 call 80482a4 <_init+0xc> 80482a4: 5b pop %ebx 80482a5: 81 c3 50 1d 00 00 add $0x1d50,%ebx 80482ab: 8b 93 fc ff ff ff mov -0x4(%ebx),%edx 80482b1: 85 d2 test %edx,%edx 80482b3: 74 05 je 80482ba <_init+0x22> 80482b5: e8 1e 00 00 00 call 80482d8 <__gmon_start__@plt> 80482ba: e8 d1 00 00 00 call 804839080482bf: e8 bc 01 00 00 call 8048480 <__do_global_ctors_aux> 80482c4: 58 pop %eax 80482c5: 5b pop %ebx 80482c6: c9 leave 80482c7: c3 ret Disassembly of section .plt: 080482c8 <__gmon_start__@plt-0x10>: 80482c8: ff 35 f8 9f 04 08 pushl 0x8049ff8 80482ce: ff 25 fc 9f 04 08 jmp *0x8049ffc 80482d4: 00 00 add %al,(%eax) ... 080482d8 <__gmon_start__@plt>: 80482d8: ff 25 00 a0 04 08 jmp *0x804a000 80482de: 68 00 00 00 00 push $0x0 80482e3: e9 e0 ff ff ff jmp 80482c8 <_init+0x30> 080482e8 <__libc_start_main@plt>: 80482e8: ff 25 04 a0 04 08 jmp *0x804a004 80482ee: 68 08 00 00 00 push $0x8 80482f3: e9 d0 ff ff ff jmp 80482c8 <_init+0x30> Disassembly of section .text: 08048300 <_start>: 8048300: 31 ed xor %ebp,%ebp 8048302: 5e pop %esi 8048303: 89 e1 mov %esp,%ecx 8048305: 83 e4 f0 and $0xfffffff0,%esp 8048308: 50 push %eax 8048309: 54 push %esp 804830a: 52 push %edx 804830b: 68 10 84 04 08 push $0x8048410 8048310: 68 20 84 04 08 push $0x8048420 8048315: 51 push %ecx 8048316: 56 push %esi 8048317: 68 d4 83 04 08 push $0x80483d4 804831c: e8 c7 ff ff ff call 80482e8 <__libc_start_main@plt> 8048321: f4 hlt 8048322: 90 nop 8048323: 90 nop 8048324: 90 nop 8048325: 90 nop 8048326: 90 nop 8048327: 90 nop 8048328: 90 nop 8048329: 90 nop 804832a: 90 nop 804832b: 90 nop 804832c: 90 nop 804832d: 90 nop 804832e: 90 nop 804832f: 90 nop 08048330 <__do_global_dtors_aux>: 8048330: 55 push %ebp 8048331: 89 e5 mov %esp,%ebp 8048333: 53 push %ebx 8048334: 83 ec 04 sub $0x4,%esp 8048337: 80 3d 10 a0 04 08 00 cmpb $0x0,0x804a010 804833e: 75 3f jne 804837f <__do_global_dtors_aux+0x4f> 8048340: a1 14 a0 04 08 mov 0x804a014,%eax 8048345: bb 18 9f 04 08 mov $0x8049f18,%ebx 804834a: 81 eb 14 9f 04 08 sub $0x8049f14,%ebx 8048350: c1 fb 02 sar $0x2,%ebx 8048353: 83 eb 01 sub $0x1,%ebx 8048356: 39 d8 cmp %ebx,%eax 8048358: 73 1e jae 8048378 <__do_global_dtors_aux+0x48> 804835a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi 8048360: 83 c0 01 add $0x1,%eax 8048363: a3 14 a0 04 08 mov %eax,0x804a014 8048368: ff 14 85 14 9f 04 08 call *0x8049f14(,%eax,4) 804836f: a1 14 a0 04 08 mov 0x804a014,%eax 8048374: 39 d8 cmp %ebx,%eax 8048376: 72 e8 jb 8048360 <__do_global_dtors_aux+0x30> 8048378: c6 05 10 a0 04 08 01 movb $0x1,0x804a010 804837f: 83 c4 04 add $0x4,%esp 8048382: 5b pop %ebx 8048383: 5d pop %ebp 8048384: c3 ret 8048385: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi 8048389: 8d bc 27 00 00 00 00 lea 0x0(%edi,%eiz,1),%edi 08048390 : 8048390: 55 push %ebp 8048391: 89 e5 mov %esp,%ebp 8048393: 83 ec 18 sub $0x18,%esp 8048396: a1 1c 9f 04 08 mov 0x8049f1c,%eax 804839b: 85 c0 test %eax,%eax 804839d: 74 12 je 80483b1 804839f: b8 00 00 00 00 mov $0x0,%eax 80483a4: 85 c0 test %eax,%eax 80483a6: 74 09 je 80483b1 80483a8: c7 04 24 1c 9f 04 08 movl $0x8049f1c,(%esp) 80483af: ff d0 call *%eax 80483b1: c9 leave 80483b2: c3 ret 80483b3: 90 nop 080483b4 : #include long long func(long long no) { 80483b4: 55 push %ebp 80483b5: 89 e5 mov %esp,%ebp 80483b7: 83 ec 08 sub $0x8,%esp 80483ba: 8b 45 08 mov 0x8(%ebp),%eax 80483bd: 89 45 f8 mov %eax,-0x8(%ebp) 80483c0: 8b 45 0c mov 0xc(%ebp),%eax 80483c3: 89 45 fc mov %eax,-0x4(%ebp) return no + 1; 80483c6: 8b 45 f8 mov -0x8(%ebp),%eax 80483c9: 8b 55 fc mov -0x4(%ebp),%edx 80483cc: 83 c0 01 add $0x1,%eax 80483cf: 83 d2 00 adc $0x0,%edx } 80483d2: c9 leave 80483d3: c3 ret 080483d4 : int main(int argc, const char *argv[]) { 80483d4: 55 push %ebp 80483d5: 89 e5 mov %esp,%ebp 80483d7: 83 e4 f8 and $0xfffffff8,%esp 80483da: 83 ec 18 sub $0x18,%esp int i; i = 100; 80483dd: c7 44 24 14 64 00 00 movl $0x64,0x14(%esp) 80483e4: 00 func(i); 80483e5: 8b 44 24 14 mov 0x14(%esp),%eax 80483e9: 89 c2 mov %eax,%edx 80483eb: c1 fa 1f sar $0x1f,%edx 80483ee: 89 04 24 mov %eax,(%esp) 80483f1: 89 54 24 04 mov %edx,0x4(%esp) 80483f5: e8 ba ff ff ff call 80483b4 return 0; 80483fa: b8 00 00 00 00 mov $0x0,%eax } 80483ff: c9 leave 8048400: c3 ret 8048401: 90 nop 8048402: 90 nop 8048403: 90 nop 8048404: 90 nop 8048405: 90 nop 8048406: 90 nop 8048407: 90 nop 8048408: 90 nop 8048409: 90 nop 804840a: 90 nop 804840b: 90 nop 804840c: 90 nop 804840d: 90 nop 804840e: 90 nop 804840f: 90 nop 08048410 <__libc_csu_fini>: 8048410: 55 push %ebp 8048411: 89 e5 mov %esp,%ebp 8048413: 5d pop %ebp 8048414: c3 ret 8048415: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi 8048419: 8d bc 27 00 00 00 00 lea 0x0(%edi,%eiz,1),%edi 08048420 <__libc_csu_init>: 8048420: 55 push %ebp 8048421: 89 e5 mov %esp,%ebp 8048423: 57 push %edi 8048424: 56 push %esi 8048425: 53 push %ebx 8048426: e8 4f 00 00 00 call 804847a <__i686.get_pc_thunk.bx> 804842b: 81 c3 c9 1b 00 00 add $0x1bc9,%ebx 8048431: 83 ec 1c sub $0x1c,%esp 8048434: e8 5f fe ff ff call 8048298 <_init> 8048439: 8d bb 18 ff ff ff lea -0xe8(%ebx),%edi 804843f: 8d 83 18 ff ff ff lea -0xe8(%ebx),%eax 8048445: 29 c7 sub %eax,%edi 8048447: c1 ff 02 sar $0x2,%edi 804844a: 85 ff test %edi,%edi 804844c: 74 24 je 8048472 <__libc_csu_init+0x52> 804844e: 31 f6 xor %esi,%esi 8048450: 8b 45 10 mov 0x10(%ebp),%eax 8048453: 89 44 24 08 mov %eax,0x8(%esp) 8048457: 8b 45 0c mov 0xc(%ebp),%eax 804845a: 89 44 24 04 mov %eax,0x4(%esp) 804845e: 8b 45 08 mov 0x8(%ebp),%eax 8048461: 89 04 24 mov %eax,(%esp) 8048464: ff 94 b3 18 ff ff ff call *-0xe8(%ebx,%esi,4) 804846b: 83 c6 01 add $0x1,%esi 804846e: 39 fe cmp %edi,%esi 8048470: 72 de jb 8048450 <__libc_csu_init+0x30> 8048472: 83 c4 1c add $0x1c,%esp 8048475: 5b pop %ebx 8048476: 5e pop %esi 8048477: 5f pop %edi 8048478: 5d pop %ebp 8048479: c3 ret 0804847a <__i686.get_pc_thunk.bx>: 804847a: 8b 1c 24 mov (%esp),%ebx 804847d: c3 ret 804847e: 90 nop 804847f: 90 nop 08048480 <__do_global_ctors_aux>: 8048480: 55 push %ebp 8048481: 89 e5 mov %esp,%ebp 8048483: 53 push %ebx 8048484: 83 ec 04 sub $0x4,%esp 8048487: a1 0c 9f 04 08 mov 0x8049f0c,%eax 804848c: 83 f8 ff cmp $0xffffffff,%eax 804848f: 74 13 je 80484a4 <__do_global_ctors_aux+0x24> 8048491: bb 0c 9f 04 08 mov $0x8049f0c,%ebx 8048496: 66 90 xchg %ax,%ax 8048498: 83 eb 04 sub $0x4,%ebx 804849b: ff d0 call *%eax 804849d: 8b 03 mov (%ebx),%eax 804849f: 83 f8 ff cmp $0xffffffff,%eax 80484a2: 75 f4 jne 8048498 <__do_global_ctors_aux+0x18> 80484a4: 83 c4 04 add $0x4,%esp 80484a7: 5b pop %ebx 80484a8: 5d pop %ebp 80484a9: c3 ret 80484aa: 90 nop 80484ab: 90 nop Disassembly of section .fini: 080484ac <_fini>: 80484ac: 55 push %ebp 80484ad: 89 e5 mov %esp,%ebp 80484af: 53 push %ebx 80484b0: 83 ec 04 sub $0x4,%esp 80484b3: e8 00 00 00 00 call 80484b8 <_fini+0xc> 80484b8: 5b pop %ebx 80484b9: 81 c3 3c 1b 00 00 add $0x1b3c,%ebx 80484bf: e8 6c fe ff ff call 8048330 <__do_global_dtors_aux> 80484c4: 59 pop %ecx 80484c5: 5b pop %ebx 80484c6: c9 leave 80484c7: c3 ret
You can see that a implict cast in source code causes a substantial object code change.