我是靠谱客的博主 紧张小馒头,最近开发中收集的这篇文章主要介绍缓冲区溢出(浅层分析)一、什么是缓冲区二、实例代码,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、什么是缓冲区

缓冲区是一块连续的计算机内存区域,可保存相同数据类型的多个实例。缓冲区可以是栈、堆和静态数据区。在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"了,但是我运行结果崩溃了,并没有如此顺畅。

 

 

最后

以上就是紧张小馒头为你收集整理的缓冲区溢出(浅层分析)一、什么是缓冲区二、实例代码的全部内容,希望文章能够帮你解决缓冲区溢出(浅层分析)一、什么是缓冲区二、实例代码所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(31)

评论列表共有 0 条评论

立即
投稿
返回
顶部