概述
一、什么是缓冲区
缓冲区是一块连续的计算机内存区域,可保存相同数据类型的多个实例。缓冲区可以是栈、堆和静态数据区。在C/C++中,通常使用字符数组和malloc/new之类内存分配函数实现缓冲区。溢出指数据被添加到分配给该缓冲区的内存块之外。溢出区溢出时最常见的程序缺陷。
当向局部数组缓冲区里写入的数据超过为其分配的大小时,就会发生缓冲区溢出。
二、实例代码
#include <stdio.h>
void foo() {
int a, * p;
//强制改变p地址位置,而这个位置是没有分配的
//为什么一定呀把&a强转为char*类型?
p = (int*)((char*)&a + 12);
*p += 12;
}
int main() {
foo();
printf("First printf calln");
printf("Second printf calln");
return 0;
}
在foo()中,p = (int*)((char*)&a + 12)的目的为让p拿到调用foo()时入栈的返回地址,然后*p += 12是为了修改foo()入栈时地址的值,让其指向printf("Second printf calln")指令的起始地址,这样得到结果就只输出"Second printf calln"了,但是我运行结果崩溃了,并没有如此顺畅。
最后
以上就是紧张小馒头为你收集整理的缓冲区溢出(浅层分析)一、什么是缓冲区二、实例代码的全部内容,希望文章能够帮你解决缓冲区溢出(浅层分析)一、什么是缓冲区二、实例代码所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复