什么是栈溢出

什么是栈溢出?
介绍
了解栈溢出,首先要了解什么是栈。

栈是一种典型的先进后出( First in Last Out )的数据结构,其操作主要有压栈(push)与出栈(pop)两种操作。

进栈(PUSH): 将一个数据放入栈里叫进栈(PUSH),相当于在扑克牌的在最上面放了一张新的扑克牌。

出栈(POP): 将一个数据从栈里取出叫出栈(POP),相当于在扑克牌的在最上面拿走了一张扑克牌。

栈在生活中的例子:堆放的餐盘,只能按顺序取放,进栈就是将盘子放在最上面,出栈就是将最上面的盘子拿走。

栈溢出
栈溢出指的是程序向栈中某个变量中写入的字节数超过了这个变量本身所申请的字节数,因而导致与其相邻的栈中的变量的值被改变。这种问题是一种特定的缓冲区溢出漏,类似的还有堆溢出,bss 段溢出等溢出方式。栈溢出漏洞轻则可以使程序崩溃,重则可以使攻击者控制程序执行流程。此外,我们也不难发现,发生栈溢出的基本前提是

程序必须向栈上写入数据。
写入的数据大小没有被良好地控制。

posted @   openGaussbaby  阅读(79)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示