理解栈溢出

wwxwww1 2014-04-05 01:11:09
在8086中栈溢满后再用push继续压栈,是会重复覆盖栈顶的数据,还是会超过栈顶,一直向之后的地址赋值下去?我刚接触汇编,不好意思啊
...全文
217 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
傌鹊 2014-04-05
  • 打赏
  • 举报
回复
ss:sp总是指向栈顶元素 sp范围的0-FFFF 栈满时SP=0 再压栈应该是 SP=0-2 等于FFFE 所以应该是循环覆盖
lm_whales 2014-04-05
  • 打赏
  • 举报
回复
16Bits,通常栈段没有64K,那么栈满溢出后,会先覆盖相邻段;有时就是自由空间---就是堆空间; 这时如果没有动态分配内存,继续溢出,可能会覆盖数据空间,甚至代码空间,具体和模式有关。 还和程序段的安排有关。 如果有动态分配内存,堆中的数据和栈顶数据互相覆盖,堆就被破坏了。 tiny 模式最多只有1个64K空间,整个程序都在这里,栈顶部就是空间的底部。栈满溢出后依次覆盖 堆空间,数据空间,代码空间。 只有超过栈的数据,超过64K,才会循环覆盖。 32Bits windows: win32 程序,由于使用保护模式, 所有应用程序代码,都是保护模式下的 flat 模式代码的用户态程序,栈空间是单独的段,栈溢出,应该会产生异常;各个段不会互相覆盖。---每个段最大可以有4G,而程序的可用空间,只有4G不到,所以栈段不会超过4G;通常只有1M,2M的样子,不会循环覆盖。 win32 程序,每个线程一个栈段,可以设置大小,不用特别定义。

21,498

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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