C语言中什么是出栈?

 我来答
GTA小鸡
高粉答主

推荐于2016-07-20 · 醉心答题,欢迎关注
知道大有可为答主
回答量:2.6万
采纳率:78%
帮助的人:1.3亿
展开全部
栈是一种数据结构,一个栈相当于一个盒子,把东西(数据)放入盒子里的过程叫做入栈,把东西从盒子里取出来的过程叫做出栈。栈还有一个特殊的规则,就是先进后出,即盒子里的东西只能叠加摆放,放进去的下一件东西只能堆在前一件东西的上面,取出时只能先取出盒子最上面的一件东西。出栈也就是将栈指针所指的数据从栈中弹出的过程,每一次出栈的一定是栈顶元素,出栈后栈指针向下移动一位指向下一个元素。习惯上入栈用PUSH表示,出栈用POP表示。
追问
有人说用出栈做的病毒是什么意思?
追答
就是指栈溢出攻击。因为C语言有一个特性,不检查堆栈越界,因此可能导致输入数据超出堆栈缓冲区长度而发生溢出。在调用子程序进入堆栈时,编译器会首先压入主程序返回地址和基址寄存器地址,然后将基址寄存器作为堆栈栈底指针,为数据开辟缓冲区。这时如果故意输入长度大于缓存区的数据,就会造成溢出,溢出的数据会向上覆写栈底EBP的值以及返回地址的值,而造成返回地址错误,等到子程序返回时就会找不到返回地址,而导致程序崩溃。而如果利用精心设计的数据去溢出堆栈,使返回地址的值被覆写为病毒的入口地址,程序返回时就会去执行攻击者设计的任意病毒程序,而造成不可想象的结果。
ylcqucc
2015-01-20 · TA获得超过1436个赞
知道小有建树答主
回答量:862
采纳率:0%
帮助的人:339万
展开全部
出栈是删除栈顶的元素。

说明:输出栈的值就是仅仅把它显示在屏幕上,并不删除它的值
追问
有人说用出栈做的病毒是什么意思?
追答
?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式