当我反汇编gcc编译的二进制文件时,我可以看到使用EBP寄存器寻址局部变量。 [EBP-0x10],[EBP-0x20]这样...... 但是,有时我可以看到局部变量是通过ESP解决的。像这样...... [ESP + 0x20],[ESP + 0x3c] ......
gcc什么时候使用ESP?还是EBP?解决局部变量?基于ESP的寻址和基于EBP的寻址有什么区别??
我可以强制GCC使用ESP或EBP来解决局部变量吗?
提前谢谢。
答案 0 :(得分:1)
ebp
用作帧指针寄存器,如果可用,将用于所有帧访问(局部变量和参数)。
您可以使用-fomit-frame-pointer
来控制gcc中帧指针的使用,-O2
和更高版本会隐式启用它。您可以使用明确的-fno-omit-frame-pointer
和更高的-O
级别禁用此功能(恢复帧指针)。