Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > C/C++ > 缓冲区溢出.概述
【标  题】:缓冲区溢出.概述
【关键字】:
【来  源】:BLOG.CSDN.NET

缓冲区溢出.概述

Your Ad Here

它山之石可以攻玉,通往电脑的路不止一条。//某黑客网站主打标语^_^

首先举一个例子:

问: 往喝红酒高脚杯里倒红酒为什么总是会倒到三分之二处停止吗?

答: 处去美学的角度,再倒就是滿出来了。

嘻嘻很弱智的一个逻辑吧,但如果把倒酒这个事件引入到程序中来呢?

看看这个程序:
#include<stdio.h>
#include<string.h>
char aa[]="50米的第一次写技术型BLOG";
int main()
{
char bb[5];
strcpy(bb,aa);
int a=0;
for(;a<bb[a];a++)
printf("\\0x%x",bb[a]);
return 0;
}

看出问题来了吧!道理还是和倒酒的事异曲同工吧! 拿strcpy同人比,人做了越界检查的工作,而程序中的strcpy没有做这个工作,
你编译不会问题的,只是在运行的时候才才会发现问题来了呵呵。//这个问题就叫做缓冲区溢出,也就是本文的主题了。

好了下面我们来讲讲为什么会出现缓冲区溢出。

当我们输入的是char aa[]="50米的第一次写技术型BLOG";因为要进入main函数,系统是把EIP和EBP保存在堆栈中,然后char bb[5];在堆栈中分配5个char,然后把"50米的第一次写技术型BLOG"保存到里面。因为当初分配的只是5个char而却要放进来远远大于5个char的字串,这样就把保存EBP和ELP给占据掉了。当执行完main函数后,系统会要恢复EBP和EIP的,而EIP已经让覆盖成了别的东西了,但注意,这里系统是不知道的,所以系统就会去执行这不知道的东西。但那个位置同时又是不可以读的,所以就出错啦。所以我们可就可以把EIP覆盖成我们想要去的程序的地方,来完成一些我们想要完成的事。//当然这已经被定义成了一种黑客手段了呵呵

PS:WINDOWS下的堆栈是按从高址到低址的顺序来分配的。


50米:第一次写这种文章,写了一些非常基础的东西,所以老手就表笑了,权当是好玩或是消遣吧。其实关于缓冲区溢出是大有文章可做的,足可以做成一本厚厚的书了。很多“正经”程序员对这种大有文章可做的事,都会去看做是黑客手段,去BS之。其实当你正真是深入下去后,才会发现这些所谓的黑客手段真的是含有一种另人击节的思想在里面,可能这也就是所谓的逆向思维吧^_^唉夜深了50米又在臆想万千了,睡吧睡吧。。。。。


50米 2005.9.1凌晨2.35

快速排序算法的JAVA实现:【上一篇】
归并排序算法的JAVA实现:【下一篇】
【相关文章】
没有相关文章
【随机文章】
  • dijkstra and floyd----- about graphic algorithm
  • .Net边学边讲(三)
  • 轻松建立Web服务器
  • 利用数据库日志恢复数据到时间点的操作
  • 一个delphi常用函数中文说
  • 花两小时终于搞定了w32.stration.cx@MM
  • 图形学中的困惑
  • 宽带接入服务器BAS
  • 跟小蔡学习数据恢复(三)
  • CSS技巧学习:像table一样布局div
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.