您的位置:首页 > 编程语言

-fomit-frame-pointer 编译选项在gcc 4.8.2版本中的汇编代码研究

2015-01-23 21:43 459 查看
#include
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)

文件大小是一样,结果fun函数的汇编代码中push %ebp; leave; 没有啦.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: