《逆向工程核心原理》学习总结(二) - 栈帧

栈帧的三个基本职能

  • 声明局部变量
  • 传递函数参数
  • 保存函数返回地址
    利用ebp(栈帧指针)寄存器可实现:
  • 访问栈内局部变量
  • 提取传递参数
  • 访问函数返回地址

栈帧的生命周期

helloworld程序main()函数的汇编代码:

helloworld main函数
main函数栈帧生成:

push ebp;保存上层调用函数的栈帧指针
mov ebp, esp; main函数的栈帧指针赋值为esp的值

main函数栈帧清除:

leave;
leave指令等价于两条基本汇编指令:
mov esp,ebp; 清除main函数栈空间
pop ebp;还原上层函数栈帧指针

利用ebp访问ret地址、局部变量、函数参数

[ebp+4] ;ret地址
[ebp]; 保存的上层函数栈帧指针
[ebp+8]; 传递的第一个参数
[ebp+C];传递的第二个参数

[ebp-4];第一个局部变量
[ebp-8];第二个局部变量

main函数生成栈帧后的栈空间图

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值