BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #53292同步于 2011/6/7
CPP机器人发帖

[合集] (有道笔试题)栈溢出的原因

shenlei
2011/6/7镜像同步0 回复
☆─────────────────────────────────────☆ salooloo (salooloo) 于 (Sun May 22 17:30:41 2011) 提到: 问了个栈溢出的可能原因,至少举3个。(这个栈是内存的栈) 我想的是:1)申请了大容量的数组;2)用了递归,层次过深,使形参、局部变量不断压栈;3)while或其他死循环,只申请没释放 第三点应该不对,这明显bug了,其他还有什么呢,栈内存很小算不算? 请童鞋们补充。 ☆─────────────────────────────────────☆ jkice (Bamboo) 于 (Sun May 22 19:11:35 2011) 提到: 关注一下,只写了前两个。。。 ☆─────────────────────────────────────☆ XIEMENG00 (莫北) 于 (Sun May 22 19:21:48 2011) 提到: 记得有个在栈上动态分配内存的函数 alloca() 这玩意应该也能导致栈溢出 【 在 salooloo 的大作中提到: 】 : 问了个栈溢出的可能原因,至少举3个。 : 我想的是:1)申请了大容量的数组;2)用了递归,层次过深,使形参、局部变量不断压栈;3)while或其他死循环,只申请没释放 : 第三点应该不对,这明显bug了,其他还有什么呢,栈内存很小算不算? : ................... ☆─────────────────────────────────────☆ salooloo (salooloo) 于 (Sun May 22 19:31:21 2011) 提到: 还有木有? ☆─────────────────────────────────────☆ ghxcst (西门吹风) 于 (Sun May 22 20:44:01 2011) 提到: ebp寄存器被覆盖? 我写的答案跟lz差不多 ☆─────────────────────────────────────☆ rebirthatsix (茫犭者-算法盲) 于 (Sun May 22 20:44:17 2011) 提到: 对栈上的数组或者指针进行越界读写 使用与函数定义时不同的约定方式来强制调用,比如把stdcall的指针传递给一个需要cdecl的地方 你自己写的第三点跟栈没什么关系 ☆─────────────────────────────────────☆ txmm (你被tx啦!) 于 (Sun May 22 20:55:49 2011) 提到: 只会前两个 ☆─────────────────────────────────────☆ wodetiandi (啥也不写了~) 于 (Sun May 22 21:15:14 2011) 提到: 想方设法的创造值类型 ☆─────────────────────────────────────☆ oscar (见光分解) 于 (Sun May 22 21:49:13 2011) 提到: 【 在 salooloo 的大作中提到: 】 : 问了个栈溢出的可能原因,至少举3个。 : 我想的是:1)申请了大容量的数组;2)用了递归,层次过深,使形参、局部变量不断压栈;3)while或其他死循环,只申请没释放 : 第三点应该不对,这明显bug了,其他还有什么呢,栈内存很小算不算? : ................... 能说下题目全陈么? ☆─────────────────────────────────────☆ renne (歼灭天使 玲) 于 (Sun May 22 21:51:50 2011) 提到: 这个标题 ……有道笔试题……………… 【 在 salooloo (salooloo) 的大作中提到: 】 : 问了个栈溢出的可能原因,至少举3个。 : 我想的是:1)申请了大容量的数组;2)用了递归,层次过深,使形参、局部变量不断压栈;3)while或其他死循环,只申请没释放 : 第三点应该不对,这明显bug了,其他还有什么呢,栈内存很小算不算? : ................... ☆─────────────────────────────────────☆ Bluerainer (Blue) 于 (Sun May 22 23:47:24 2011) 提到: 局部变量过大。。。书上看的 ☆─────────────────────────────────────☆ fentoyal (长风长歌) 于 (Mon May 23 08:01:33 2011) 提到: 【 在 rebirthatsix 的大作中提到: 】 : 对栈上的数组或者指针进行越界读写 : 使用与函数定义时不同的约定方式来强制调用,比如把stdcall的指针传递给一个需要cdecl的地方 : 你自己写的第三点跟栈没什么关系 : ................... 越界读写和栈溢出不一样吧? ☆─────────────────────────────────────☆ rebirthatsix (茫犭者-算法盲) 于 (Mon May 23 09:24:06 2011) 提到: 那看这个栈溢出怎么定义了,这个stack overflow的来源应该还是安全圈子吧 直接越界写栈空间,从而修改seh链结构或者函数返回地址,这是构造栈溢出最直接的方式 【 在 fentoyal 的大作中提到: 】 : : 对栈上的数组或者指针进行越界读写 : : 使用与函数定义时不同的约定方式来强制调用,比如把stdcall的指针传递给一个需要cdecl的地方 : : 你自己写的第三点跟栈没什么关系 : ................... ☆─────────────────────────────────────☆ rolan (迷途知返的羊) 于 (Mon May 23 15:53:15 2011) 提到: 在栈区使用“布局new”操作符 ☆─────────────────────────────────────☆ fentoyal (长风长歌) 于 (Mon May 23 16:40:40 2011) 提到: 【 在 rolan 的大作中提到: 】 : 在栈区使用“布局new”操作符 : -- 具体如何做呢? ☆─────────────────────────────────────☆ fentoyal (长风长歌) 于 (Mon May 23 16:41:28 2011) 提到: 【 在 rebirthatsix 的大作中提到: 】 : 那看这个栈溢出怎么定义了,这个stack overflow的来源应该还是安全圈子吧 : 直接越界写栈空间,从而修改seh链结构或者函数返回地址,这是构造栈溢出最直接的方式 : 【 在 fentoyal 的大作中提到: 】 : ................... 我觉着它这里指需求的栈空间大于系统能给予的 ☆─────────────────────────────────────☆ shenlei (我爱果子|[路]|天山南北|潇湘隐士) 于 (Mon May 23 17:35:21 2011) 提到: class c{}; char a[sizeofc];//栈空间 c* p=new(a) c;//在指定空间上new一个c的对象 【 在 fentoyal (长风长歌) 的大作中提到: 】 : 具体如何做呢? ☆─────────────────────────────────────☆ guitarfeng (czf) 于 (Tue May 24 00:03:01 2011) 提到: 动态分配内存和栈有M关系? ☆─────────────────────────────────────☆ ghxcst (西门吹风) 于 (Tue May 24 08:21:06 2011) 提到: alloca 分配的内存在栈上 【 在 guitarfeng 的大作中提到: 】 : 动态分配内存和栈有M关系? : -- ☆─────────────────────────────────────☆ potatossss (薯仔) 于 (Tue May 24 08:48:54 2011) 提到: 不知道这个算不算:在一个只有固定大小的(极小,如内核栈)栈内使用了过多的自动变量 ☆─────────────────────────────────────☆ datou06415 (大头先生) 于 (Tue May 24 09:06:45 2011) 提到: 更改系统默认的栈大小,把它改小了。 ☆─────────────────────────────────────☆ chucai (一只眉) 于 (Tue May 24 10:10:57 2011) 提到: 数组越界 多线程操作时,访问同步资源 算不算? ☆─────────────────────────────────────☆ hyx () 于 (Tue May 24 10:35:17 2011) 提到: 求各种正解啊。 ☆─────────────────────────────────────☆ fentoyal (长风长歌) 于 (Tue May 24 11:47:03 2011) 提到: 【 在 shenlei 的大作中提到: 】 : class c{}; : char a[sizeofc];//栈空间 : c* p=new(a) c;//在指定空间上new一个c的对象 : ................... 我是指如何让栈溢出 ☆─────────────────────────────────────☆ LittleSun (小太阳) 于 (Tue May 24 15:20:53 2011) 提到: 还有种原因:使用非安全的函数,如strcpy() ☆─────────────────────────────────────☆ salooloo (salooloo) 于 (Tue May 24 17:33:06 2011) 提到: 呃 各种不懂 太深奥了 strcpy()也会造成栈内存溢出吗? ☆─────────────────────────────────────☆ dawnc (9527) 于 (Tue May 24 17:54:28 2011) 提到: 【 在 salooloo 的大作中提到: 】 : 呃 各种不懂 太深奥了 : strcpy()也会造成栈内存溢出吗? : -- : ................... char *a; char *b="abc"; strcpy(a,b); 这样应该算吧 ☆─────────────────────────────────────☆ xp2008 (boss) 于 (Tue May 24 21:13:52 2011) 提到: 这个不算,这个是未初始化的野指针。 【 在 dawnc 的大作中提到: 】 : : 呃 各种不懂 太深奥了 : : strcpy()也会造成栈内存溢出吗? : : -- : ................... ☆─────────────────────────────────────☆ LittleSun (小太阳) 于 (Tue May 24 22:53:12 2011) 提到: 当dst所指的缓冲区长度小于src时,就会缓冲区溢出。因为strcpy只有两个参数,没有检查长度。strcpy_s()解决了该问题。 【 在 xp2008 的大作中提到: 】 : 这个不算,这个是未初始化的野指针。 : 【 在 dawnc 的大作中提到: 】 : : : 呃 各种不懂 太深奥了 : ...................
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。