QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 894|回复: 10

會編程的請進來

[复制链接]
发表于 2004-7-28 23:51:45 | 显示全部楼层 |阅读模式
我現在一直弄不明白"堆栈溢出"是什麽意思, 各位能不能解釋一下 謝謝
发表于 2004-7-28 23:57:49 | 显示全部楼层
就像往桶里灌水,装满了,水就会溢出,这叫overfolw.
不过堆栈还会有underflow
回复

使用道具 举报

 楼主| 发表于 2004-7-29 12:15:30 | 显示全部楼层
那麽會有什麽後果?
回复

使用道具 举报

发表于 2004-7-30 15:20:26 | 显示全部楼层
比如我分配一个整型数组,int a[4],(分配数组时,是在栈上的),然而我在用的时候用了 a[4],那么就溢出了,我所得到的值是内存中的一个垃圾值,是随机的,这会产生错误的运行结果。
回复

使用道具 举报

发表于 2004-7-31 00:23:00 | 显示全部楼层
如果读取还好,要是写入,搞不好系统会痛苦的死去。
回复

使用道具 举报

发表于 2004-7-31 00:23:34 | 显示全部楼层
我来简单的说一下。希望对你有用:
溢出的定义,形象点说:象楼上的仁兄说的那样,就好像水桶里面的水溢出来一样。
我主要针对你的问题:溢出后会有什么样的后果详细的说点:

这两年来溢出的词出现很多,特别是在计算机安全领域里,事实上很多溢出是人为所作,一些人为了达到某种目的,在苦苦的寻找,分析一些程序是否存在溢出,一旦如果溢出可能出现的时候,他们通常去构造一些精心设计的代码,来让原来不健壮的程序,达到溢出。
你知道堆栈里面保存的是指针的返回地址,如果一个脆弱程序一旦被精心构造的溢出代码溢出后,这样堆栈里面的指针地址就会被改变,经过设计的溢出代码,以攻击的目的来达到自己想要去的地方。从而改变整个程序的执行步骤。跳转到一些特定的地方。

但是你不要再问,跳到特定的地方有什么用?不然我会吐血而亡。
回复

使用道具 举报

发表于 2004-7-31 10:14:11 | 显示全部楼层
请问楼上的,跳到特定的地方有什么用?
......

.......

......

.......

现在njue死了没有?
                  
回复

使用道具 举报

发表于 2004-7-31 13:05:40 | 显示全部楼层

忘兄,不要再玩我了.   
回复

使用道具 举报

发表于 2004-8-2 20:39:31 | 显示全部楼层
当然是跳到我自己写的代码啦,比如是一段病毒代码。
回复

使用道具 举报

发表于 2004-8-3 00:30:31 | 显示全部楼层
这个得对计算机程序的构成有一定了解。
计算机的main memory中的layout大概从high address 到low address是
1. argc,argv,enviroment
2.activation records for function call
这两个部分是堆栈区,在2. activation records中放置 function call 's return address.一个非常重要的事实是这个现在被调用的函数 function call 's return address 是放在自动变量的后面。
如果发生了缓冲区溢出,则这个 function call 's return address.可以被改写,那么这个函数返回时执行的代码段就会跳传到特定的地方即黑客希望执行的程序段。
回复

使用道具 举报

发表于 2004-8-3 10:33:39 | 显示全部楼层
好。互相学习
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-7 18:13 , Processed in 0.043991 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表