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

基于GCC ebp的寻址与基于esp的寻址,gcc,stack,Gcc,Stack,当我反汇编gcc编译的二进制文件时,我可以看到局部变量是使用EBP寄存器寻址的。[EBP-0x10],[EBP-0x20]像这样。。。 然而,有时我可以看到局部变量通过ESP。。[ESP+0x20],[ESP+0x3c] gcc何时使用ESP?还是EBP?如何处理局部变量?基于ESP的寻址和基于EBP的寻址有什么区别 我可以强制GCC使用ESP或EBP来处理局部变量吗 提前感谢。ebp用作帧指针寄存器,如果可用,将用于所有帧访问(本地变量和参数) 您可以使用-fomit frame pointe

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

gcc何时使用ESP?还是EBP?如何处理局部变量?基于ESP的寻址和基于EBP的寻址有什么区别

我可以强制GCC使用ESP或EBP来处理局部变量吗


提前感谢。

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

您可以使用
-fomit frame pointer
控制gcc中帧指针的使用,该命令由
-O2
及更高版本隐式启用。您可以使用显式的
-fno省略帧指针
和更高的
-O
级别禁用此功能(返回帧指针)