首页 > 其他 > 详细

栈帧的作用

时间:2021-04-29 09:52:31      阅读:21      评论:0      收藏:0      [点我收藏+]

栈帧就是利用EBP(栈帧指针,请注意不是ESP)寄存器访问栈内局部变量、参数、函数返回地址等的手段。

下面通过一个案例呈现:

先编写一个很简单的程序,但是这个程序一定要用到局部变量或参数,详细代码见下图

Test.cpp

#include <stdio.h>
#include <Windows.h>
int main(int arg,char **args)
{
    MessageBoxA(0, args[0],"",0);//很简单的一个程序,就是用提示框显示第一个参数而已
}

程序效果如下图所示:

技术分享图片

 

 这个我生成了两个版本,一个是正常编译,一个经过编译器优化后去除栈帧的(开启编译器优化选项,白度一下),用ollydebug打开。

正常编译版本,如下图所示。

技术分享图片

 

 上图我们可以看到有两处非常明显的利用EBP访问参数和局部变量。

编译器优化版本

技术分享图片

 

 从上图可以很明显的看到不仅保存栈底的指令不见了,代码中也不再依赖与EBP访问参数和局部变量,但因为编译器优化直接使用了ESP访问参数了。

 

 

 

编译运行环境:vs2019 windows 10 x64  生产程序32位。

 

栈帧的作用

原文:https://www.cnblogs.com/czlnb/p/14715942.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!