#include文件大小是一样,结果fun函数的汇编代码中push %ebp; leave; 没有啦.void fun(void) { printf("fun"); } int main(int argc, char *argv[]){ fun(); return 0;} $ gcc -o test_ffp test.c $ gcc -fomit-frame-pointer -o test_ffp test.c -rwxr-xr-x 1 Admin 40968 Jan 23 21:14 test.exe -rwxr-xr-x 1 Admin 40968 Jan 23 21:22 test_ffp.exe $ gdb -q test.exe $ gdb -q test_ffp.exe (gdb) disass main (gdb) disass main Dump of assembler code for \ --ction main: Dump of assembler code for \ --ction main: 0x00401574 <+0>: push %ebp 0x00401573 <+0>: push %ebp 0x00401575 <+1>: mov %esp,%ebp 0x00401574 <+1>: mov %esp,%ebp 0x00401577 <+3>: and $0xfffffff0,%esp 0x00401576 <+3>: and $0xfffffff0,%esp 0x0040157a <+6>: call 0x401fb0 <__main> 0x00401579 <+6>: call 0x401fb0 <__main> 0x0040157f <+11>: call 0x401560 0x0040157e <+11>: call 0x401560 0x00401584 <+16>: mov $0x0,%eax 0x00401583 <+16>: mov $0x0,%eax 0x00401589 <+21>: leave 0x00401588 <+21>: leave 0x0040158a <+22>: ret 0x00401589 <+22>: ret 0x0040158b <+23>: nop 0x0040158a <+23>: nop 0x0040158c <+24>: xchg %ax,%ax 0x0040158b <+24>: nop 0x0040158e <+26>: xchg %ax,%ax 0x0040158c <+25>: xchg %ax,%ax End of assembler dump. End of assembler dump. (gdb) disass fun (gdb) disass fun Dump of assembler code for \ --ction fun: Dump of assembler code for \ --ction fun: 0x00401560 <+0>: push %ebp 0x00401560 <+0>: sub $0x1c,%esp 0x00401561 <+1>: mov %esp,%ebp 0x00401563 <+3>: movl $0x404024,(%esp) 0x00401563 <+3>: sub $0x18,%esp 0x0040156a <+10>: call 0x402738 0x00401566 <+6>: movl $0x404024,(%esp) 0x0040156f <+15>: add $0x1c,%esp 0x0040156d <+13>: call 0x402738 0x00401572 <+18>: ret 0x00401572 <+18>: leave End of assembler dump. 0x00401573 <+19>: ret (gdb) End of assembler dump. (gdb)
相关文章: