为什么VS下一个int总是从ebp-8开始,ebp-4对应的4个字节干吗用了?

dpdp_2012 2012-10-10 05:11:30
RT
...全文
425 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
dpdp_2012 2012-10-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
1 我记不清了,你可以查一下vc用了防止stackoverflow 机制,在返回地址前插一个checkval。
我不确定是不是这玩意,你可以搜一下。
[/Quote]我也是在想留出这四个字节,是不是和什么缓冲区溢出有关。
大熊猫侯佩 2012-10-10
  • 打赏
  • 举报
回复
ebp+4是返回地址鸟
swlilike 2012-10-10
  • 打赏
  • 举报
回复
ebp-4 是不是存放 ret 的返回地址了?
大熊猫侯佩 2012-10-10
  • 打赏
  • 举报
回复
1 我记不清了,你可以查一下vc用了防止stackoverflow 机制,在返回地址前插一个checkval。
我不确定是不是这玩意,你可以搜一下。
大熊猫侯佩 2012-10-10
  • 打赏
  • 举报
回复
你说的是函数局部变量是吧?这个没有绝对。

因为在函数进入序言后,

ebp->old ebp
ebp+4->ret addr
ebp+8->1st parm

所以ebp-4是可以使用的,至于vc为啥不用,2种可能:

1 做vc专有用途

2 简单无视他,就是不用

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧