VC6 VS VS2008

本文通过一个简单的C语言程序示例,探讨了VS2008与VC6.0编译器在处理数组越界时的不同行为。在VS2008中,数组末尾后的额外字节预留如何防止潜在的安全问题,并展示了这种机制如何影响程序的运行。

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

有这样一段程序:

/***************************************************
*     09/8/27       by  Jack Lee
****************************************************/

#include <stdio.h>
void main()
{
 
 int i,a[10];
 for(i=0;i<=10;i++) //for(i=0;i<=8;i++)/ for(i=0;i<=9;i++)
 {
  a[i]=0;
 }
}

* 问题描述: for(i=0;i<=8;i++) 时 ,VS2008在数组a后面预留了2个字节

* 预留字节是因为,之前很多C病毒经常应用数组越界的原理进行操作,而想出的解决办法

*  所以,我使  for(i=0;i<=10;i++)欲覆盖 a[9]和 i(既a[10])

* 从而造成死循环

*  而VC6.0在数组a后面直接存储的是i

*  所以,我使  for(i=0;i<=8;i++)欲 i(既a[8])

* 从而造成死循环

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值