什么是栈溢出?
介绍
了解栈溢出,首先要了解什么是栈。
栈是一种典型的先进后出( First in Last Out )的数据结构,其操作主要有压栈(push)与出栈(pop)两种操作。
进栈(PUSH): 将一个数据放入栈里叫进栈(PUSH),相当于在扑克牌的在最上面放了一张新的扑克牌。
出栈(POP): 将一个数据从栈里取出叫出栈(POP),相当于在扑克牌的在最上面拿走了一张扑克牌。
栈在生活中的例子:堆放的餐盘,只能按顺序取放,进栈就是将盘子放在最上面,出栈就是将最上面的盘子拿走。
栈溢出
栈溢出指的是程序向栈中某个变量中写入的字节数超过了这个变量本身所申请的字节数,因而导致与其相邻的栈中的变量的值被改变。这种问题是一种特定的缓冲区溢出漏,类似的还有堆溢出,bss 段溢出等溢出方式。栈溢出漏洞轻则可以使程序崩溃,重则可以使攻击者控制程序执行流程。此外,我们也不难发现,发生栈溢出的基本前提是
- 程序必须向栈上写入数据。
- 写入的数据大小没有被良好地控制。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




