程序崩溃:缓冲区溢出
来源:互联网 发布:java网上商城 编辑:程序博客网 时间:2024/05/21 18:33
也是从公开课学到的,作了些笔记,现在在实习的机房,靠回忆顺便和大家分享,笔记在宿舍的电脑里,回去再补上。
seg failure:
bus failure: (这个我不清楚,网上也查了些资料,不怎么清楚)
一个程序:
void foo()
{
int i;
int array[4];
for(i=0;i<=4;++i)
array[i]=0;
}
这段程序会一直无限循环,因为array[4]的地址和i的地址一样的,也就是当第四次循环后,i=3,然后循环执行,++i;即array[4]=0即把 i 地址处的值为4覆盖成为0。
然后执行++i,成功又执行,一样这样下去。其实这造成了缓冲区溢出了。
在栈中,地址是由高往低增长的,那么i的地址(即array[4]的地址)在array[3]上面,array[0]在最下面。可以自己测试打印出他们的地址。
另一个:
void foo()
{
int i;
short array[4];
for(i=0;i<=4;++i)
array[i]=0;
}
这个程序如果在大尾端机器中则不会出现问题。
如果在小尾端机器中则会出现和上面的问题是一样的:死循环
另一个:
void foo()
{
int array[4];
int i;
for(i=0;i<=4;++i)
array[i]-=4;
}
假设array[i]的初始值都为0;
那就不会造成上面的情况,但是会造成这个函数foo会被执行n次,这是因为如果有一个函数failure调用了foo,那么failure的下一条指令的地址进入saved pc
然后就call <foo> 这样 因为每次执行array[4]-=4;使得saved pc中的值减去4,即又指向了call <foo>,又调用了foo函数,所以这个函数foo会一直执行下去。
感觉和上面一段代码差不多。。
其实这些错误的程序可以自己动手调试一下,打印出他们的信息,可以研究下,能学到好多的东西的。
如果有不正确的地方,欢迎提出来,这样也可以改正,谢谢。
- 程序崩溃:缓冲区溢出
- 缓冲区溢出程序
- 程序缓冲区溢出崩
- 编写自己的缓冲区溢出利用程序
- 看程序体验缓冲区溢出漏洞
- 缓冲区溢出
- 缓冲区溢出
- 缓冲区溢出
- 缓冲区溢出
- 缓冲区溢出
- 缓冲区溢出
- 缓冲区溢出
- 缓冲区溢出
- 缓冲区溢出
- 缓冲区溢出
- 缓冲区溢出
- 缓冲区溢出
- 缓冲区溢出
- 【读书笔记-重构与模式】 观察者模式--将客户元素从主体中分离
- 口袋里的较量–盘点中国移动互联网“第一次世界大战”
- Spring2.5 注解介绍(3.0通用)
- xml转化成php数组(文件夹读取,XML解析)
- _ b e g i n t h r e a d e x函数与C r e a t e T h r e a d函数
- 程序崩溃:缓冲区溢出
- 延参法师-《80后脱口秀》 -《天天向上》-《宽怀人生》
- N进制数字及“移码”应用
- glut实现动画
- js判断图片是否加载完成
- .net WinForm用户控件开发--(1)带按钮的textbox控件
- 6.7.1 Oops—错误地调用了C r e a t e T h r e a d
- Android中的JSON详细总结
- 有关串口获得控制台的问题