%rbp 寄存器不再有特殊的 帧指针的含义了?


1 ==>  64 位平台下, %ebp 扩展的寄存器 %rbp,只有在 -O0 不优化的编译条件下 ,还具有 帧指针的特殊含义。

2 ==> 因为大部分的程序,都加了优化编译选项:-O2,这几乎是普遍的选择。在这种优化级别,甚至更低的优化级别-O1,都已经去除了帧指针,也就是%ebp中再也不是保存帧指针,而且另作他途。



在x86-32时代,当前栈帧总是从保存%ebp开始,空间由运行时决定,通过不断push和pop改变当前栈帧空间;x86-64开始,GCC有了新的选择,优化编译选项-O1,可以让GCC不再使用栈帧指针,下面引用 gcc manual 一段话 :

- O also turns on - fomit - frame - pointer on machines where doing so does not interfere with debugging .

这样一来,所有空间在函数开始处就预分配好,不需要栈帧指针;通过%rsp的偏移就可以访问所有的局部变量。

你可能感兴趣的:(汇编&逆向&WireShark)