TANGJKD
驱动牛犊
驱动牛犊
  • 注册日期2004-02-22
  • 最后登录2004-10-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1863回复:9

缓冲区溢出的示例,看不懂,请各位老鸟给个解答

楼主#
更多 发布于:2004-09-21 09:06
 :)
    近日我在看《黑客攻击与防御》中的关于缓冲区溢出的章节时,有这么一段代码:
          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个具体是什么含义啊。
请各位老鸟给指点
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2004-09-21 09:29
我觉得你给的堆栈FRAME不是很对,你自己写个程序,然后跟踪看看
缓冲区溢出虽然现在很吃香,但随着X86-64的执行保护的出现,相信以后也没什么用武之地了.....
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
deltali
驱动小牛
驱动小牛
  • 注册日期2002-10-25
  • 最后登录2010-07-06
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望23点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-09-21 11:10
应该是分配的局部变量
我又来了,生命不息,驱动不止。
TANGJKD
驱动牛犊
驱动牛犊
  • 注册日期2004-02-22
  • 最后登录2004-10-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-09-21 19:54
我的代码是照着书上抄的,难道是作者的错误吗
TANGJKD
驱动牛犊
驱动牛犊
  • 注册日期2004-02-22
  • 最后登录2004-10-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-09-21 19:56
我想缓冲区溢出还是有用的饿,因为32的环境要用一段时间,他不会那么快就灭亡的
delux9704
驱动牛犊
驱动牛犊
  • 注册日期2002-11-14
  • 最后登录2010-11-15
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-09-23 15:01
保护了也不一定有用,堆栈段不可执行的模式也可以绕过去么。。办法总是存在滴~~`:)
lilo
驱动牛犊
驱动牛犊
  • 注册日期2001-05-24
  • 最后登录2008-08-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望6点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-12-11 08:44
从硬件上保护会好很多,但效率会打折扣。
用类型安全的语言也会好很多,比如Java.
再有就是在软件上使用“金丝雀技术”,就是在缓冲区边界设置检查,VC7就支持/GS缓冲区溢出检查,会损失一些效率和Size.
yuansong
驱动牛犊
驱动牛犊
  • 注册日期2004-11-02
  • 最后登录2004-12-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-12-15 16:54
兄弟:下面这句对吗?
char *name="hackingexposedhackingexposedhackingexposed";

--------------------我个人认为是严重错误?没有分配空间就赋予值,对吗?我是刚接触LINUX的哈!不对请指教.大家共同\进步.
tooflat
论坛版主
论坛版主
  • 注册日期2002-07-08
  • 最后登录2014-03-11
  • 粉丝2
  • 关注0
  • 积分1007分
  • 威望551点
  • 贡献值3点
  • 好评度476点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-12-15 17:35
兄弟:下面这句对吗?
char *name="hackingexposedhackingexposedhackingexposed";

--------------------我个人认为是严重错误?没有分配空间就赋予值,对吗?我是刚接触LINUX的哈!不对请指教.大家共同进步.


这是C语言的用法,没问题的。
liny0
驱动牛犊
驱动牛犊
  • 注册日期2004-12-15
  • 最后登录2007-12-19
  • 粉丝0
  • 关注0
  • 积分616分
  • 威望63点
  • 贡献值0点
  • 好评度59点
  • 原创分0分
  • 专家分0分
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.
游客

返回顶部