能力值:
( LV7,RANK:110 )
|
-
-
2 楼
column为第一个局部变量。向上作为 指针寻址 逐个覆盖ebp返回地址,导致的溢出。楼主是想表达这个意思不?
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
哥,我来**啦...
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
int column[] = {0};这样就相当于int column[1]={0},索引大于0时自然就越界缓冲区溢出了,很容易就覆盖返回地址了...
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
路过 看看!!!!!!!
|
能力值:
( LV5,RANK:70 )
|
-
-
6 楼
[QUOTE=wmg;1047776]int column[] = {0};这样就相当于int column[1]={0},索引大于0时自然就越界缓冲区溢出了,很容易就覆盖返回地址了...[/QUOTE]
嗯。。这位仁兄说的是。。int column[]={0},相当于int column[1]={0}.。我还以为int column[]={0},相当于 int* column;呢 .误人子弟,罪过啊。。
|
能力值:
( LV5,RANK:70 )
|
-
-
7 楼
嗯。。就想表达这个意思。。也提醒我们别犯这个错误。。呵呵。。
|
能力值:
( LV9,RANK:140 )
|
-
-
8 楼
文章讲得一点不清楚,
栈溢出是这么回事的:
函数调用时参数先从右往左依次压栈,
然后把EIP压栈,也就是下一条指令的地址压栈,
接着把EBP压栈,ESP赋值给EBP,
int column[] = {0};占4个字节+EBP4个字节共需要8个字节的栈存储空间,
这时候SUB ESP,8 向上开辟8个字节空间,
从栈顶向下写内容,
scanf读取整数数组,
读取1个int空间就已满,超过的会使栈空间不够则往下覆盖掉EBP、返回地址、参数..
另外,malloc是在堆中申请的内存块,不是在栈内申请,切记!
|
能力值:
( LV5,RANK:70 )
|
-
-
9 楼
[QUOTE=小覃;1057600]文章讲得一点不清楚,
栈溢出是这么回事的:
函数调用时参数先从右往左依次压栈,
然后把EIP压栈,也就是下一条指令的地址压栈,
接着把EBP压栈,ESP赋值给EBP,
int column[] = {0};占4个字节+EBP4个字节共需要8个字节的栈存储空间,
这时候SUB ESP,8 ...[/QUOTE]
嗯。。这位哥们解释了堆栈溢出的原理。。
我只是想提醒大家。。
int column[]={0};
然后一个for循环
内部的scanf("%d",&column[i]);
会产生栈中返回地址覆盖。。
这是个栈溢出的小例子。。栈溢出的使用很多。网络渗透,就有的通过栈溢出,来达到返回地址给覆盖成别有用心的子程序的地址。。
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
路过看看哈,学习。
|
|
|