初看缓冲区(堆栈)溢出

本文通过一个简单的C程序示例介绍了缓冲区溢出的概念,解释了strcpy函数的工作方式以及其潜在风险。当输出字符串长度超过分配的内存空间时,会导致堆栈中的EIP指针被覆盖,进而可能引发安全问题。堆栈是先进后出的数据结构,保存函数调用的相关信息,包括EBP和EIP。通过覆盖EIP,可以控制程序执行流程,这在恶意攻击中可能被利用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先看一段简单的小程序

#include <stdio.h>
#include <string.h>

char name[]="NEUQ_CSA";

int main()
{
	char output[8];
	strcpy(output,name);
	
	for(int i=0;i<8&&output[i];i++)
		printf("\\0x%x",output[i]);
	
	return 0;
}

首先, #include<stdio.h> 和 #include<string.h> 是包含后面使用的strcpy函数和printf函数的头文件。
 

然后, char name[] = “NEUQ_CSA”; 是把‘name’这个数组赋值,往里面放入‘NEUQ_CSA’这几个字符。
 
然后是 int main(){ …… } ,这个是重点啦,这就是我们常说的主函数!程序进来就是先找到这个地方,执行里面的语句。
 
接下来的 char output[8]; strcpy(output, name);  就是让系统给output变量分配8个char的空间,然后把‘name’里面装的字符拷贝给它。
 
 strcpy(des,source) 这个拷贝函数是把第二个参数source的值拷给第一个参数des。它不检查拷贝的长度,它会一直拷贝,直到source到结尾。这就是它的弱点!
 
下面的 for(int i=0;i<8&&output[i];i++) printf("\\0x%x",output[i]);  只是让大家方便检查 output里面的值而已,我把它以16进制的形式打出来。
 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值