基于GCC ebp的寻址与基于esp的寻址

时间:2014-05-27 17:01:12

标签: gcc stack

当我反汇编gcc编译的二进制文件时,我可以看到使用EBP寄存器寻址局部变量。 [EBP-0x10],[EBP-0x20]这样...... 但是,有时我可以看到局部变量是通过ESP解决的。像这样...... [ESP + 0x20],[ESP + 0x3c] ......

gcc什么时候使用ESP?还是EBP?解决局部变量?基于ESP的寻址和基于EBP的寻址有什么区别??

我可以强制GCC使用ESP或EBP来解决局部变量吗?

提前谢谢。

1 个答案:

答案 0 :(得分:1)

ebp用作帧指针寄存器,如果可用,将用于所有帧访问(局部变量和参数)。

您可以使用-fomit-frame-pointer来控制gcc中帧指针的使用,-O2和更高版本会隐式启用它。您可以使用明确的-fno-omit-frame-pointer和更高的-O级别禁用此功能(恢复帧指针)。