函数调用栈

博客网址:www.shicoder.top
微信:18223081347
欢迎加群聊天 :452380935

这个分栏我们开始学习PWN,当然PWN也是自己的兴趣爱好,所以可能博客更新较慢,不好意思啦

前置知识

每个函数都有自己的栈帧,栈底用ebp,栈顶用esp,还有一个eip,表示即将执行的指令的地址,下面是栈的图示,是从高地址向低地址增长

image-20220502093832451

函数的栈帧包括

  • 函数的返回地址和参数
  • 本地变量
  • 调用前后上下文

因此比如一个main函数执行时候,ebp指向其栈帧底部,然后在函数运行时候随时pushpop,导致其esp不断变化,当要调用子函数func时候,会先push子函数所需要的参数,然后进入func之后,首先push ebp,因为此时的ebpmain函数的,为了在func函数结束后,找到main函数的ebp,所以先保留,然后mov ebp,esp,这时候ebp就会被赋予新的值,这个值就是func函数栈帧的底部,然后就是一些func函数自己的操作,当要使用传进来的参数时候,就去当时在main调用funcpush的参数去取,当执行func函数之后,需要返回到main,此时分两种情况

  • func中没有使用过局部变量,则进入func之后,ebpesp始终是一样的,所以直接pop ebp,此时ebp中就存放了call调用前,mainebp
  • func中使用过局部变量,则进入func
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值