阅读:1863回复:9
缓冲区溢出的示例,看不懂,请各位老鸟给个解答
:)
近日我在看《黑客攻击与防御》中的关于缓冲区溢出的章节时,有这么一段代码: void overflow(void) {char *name="hackingexposedhackingexposedhackingexposed"; char buff; strcpy(buff,name);<= return; } 随后他给粗了runing后的stack如下: address of *name address of buff vars buff saved ebp return of address 别的我都懂,但是在上图中,stack中的中间2个具体是什么含义啊。 请各位老鸟给指点 |
|
沙发#
发布于:2004-09-21 09:29
我觉得你给的堆栈FRAME不是很对,你自己写个程序,然后跟踪看看
缓冲区溢出虽然现在很吃香,但随着X86-64的执行保护的出现,相信以后也没什么用武之地了..... |
|
|
板凳#
发布于:2004-09-21 11:10
应该是分配的局部变量
|
|
|
地板#
发布于:2004-09-21 19:54
我的代码是照着书上抄的,难道是作者的错误吗
|
|
地下室#
发布于:2004-09-21 19:56
我想缓冲区溢出还是有用的饿,因为32的环境要用一段时间,他不会那么快就灭亡的
|
|
5楼#
发布于:2004-09-23 15:01
保护了也不一定有用,堆栈段不可执行的模式也可以绕过去么。。办法总是存在滴~~`:)
|
|
6楼#
发布于:2004-12-11 08:44
从硬件上保护会好很多,但效率会打折扣。
用类型安全的语言也会好很多,比如Java. 再有就是在软件上使用“金丝雀技术”,就是在缓冲区边界设置检查,VC7就支持/GS缓冲区溢出检查,会损失一些效率和Size. |
|
7楼#
发布于:2004-12-15 16:54
兄弟:下面这句对吗?
char *name="hackingexposedhackingexposedhackingexposed"; --------------------我个人认为是严重错误?没有分配空间就赋予值,对吗?我是刚接触LINUX的哈!不对请指教.大家共同\进步. |
|
8楼#
发布于:2004-12-15 17:35
兄弟:下面这句对吗? 这是C语言的用法,没问题的。 |
|
9楼#
发布于:2004-12-16 13:32
name is a char pointer point to the "..." string;
buf is a char; strcpy() does not check or compare the size of the parameters. So after strcpy, the data fill out buf and overwrite other address not belong to buf. That's what it mean. |
|