深入C/C++之基于CheckStackVars的安全检查(VS2008)
最近一直忙毕业的相关事情,加上工作,转眼间,又到月底了,之前承诺的每月一篇博文,前几天就一直在寻找到底要写什么,近两天又突然发现有很多东西可以写。本篇就先延续之前的一篇基于Cookie的安全检查机制(深入C/C++之基于Cookie的安全检查(VS2005))来介绍下另外一种在DEBUG版本下的安全检查,也就是CheckStackVars检查,话不多说,直接进入正题。
在VS2008下,函数的栈空间里如果存在数组,就会自动加上CheckStackVars检查,顾名思义,就是用来检查局部数据是否访问越界。相对来说,这种检查只能起到一定的作用,并不会所有越界访问都能检查到,根据后面的原理介绍会了解到这点。既然是检查局部的,那么在函数内定义的static类型数组或者函数外部的全局数组并不会采用此检查,既然是检查数组,那么如果函数内没有局部数组时,此检查也不会存在。
首先来看一个简单的例子,验证这个检查的存在:
void TestVars( void )
{
int bf = 0xeeeeeeee;
char array[10] = { 0 };
int bk = 0xffffffff;
strcpy( array, "masefee" );
}
int main( void )
{
TestVars();
return 0;
}
在这个例子中,存在一个数组array,这里刻意定义了另外两个变量,用于看这两个变量与数组array的内存分布情况。这样就能清晰的了解到CheckStackVars这个检查的原理。然后来看看Debug下,TestVars函数内部的3个局部变量的内存分布情况。断点打在strcpy这句上,分布如下:
ff ff ff ff cc cc cc cc cc cc cc cc 00 00 00 00 00 00 00 00 00 00cc cc cc cc cc cc cc cc cc cc ee ee ee ee
bk array &nbs
相关文档:
来自bccn C语言论坛
首先声明一点,本文为转贴。
浅谈C中的malloc和free
作者:lj_860603 阅读人次:43013 文章来源:本站原创 发布时间:2006-8-5 网友评论(32)条
原帖及讨论:http://bbs.bccn.net/thread-82212-1-1.html
在C语言的学习中,对内 ......
下面说到的C语言中的知识,我只是在工作中经常见到或用到,但从未深究为什么,今天才却道原来简简单单下面孕育这无穷的知识点和我的盲点,是该边学习边记录了。
预处理器(Preprocessor)
1 . 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)
#define ......
摘要:
本文从介绍基础概念入手,探讨了在C/C++中对日期和时间操作所用到的数据结构和函数,并对计时、时间的获取、时间的计算和显示格式等方面进行了阐述。本文还通过大量的实例向你展示了time.h头文件中声明的各种函数和数据结构的详细使用方法。
关键字:UTC(世界标准时间),Calendar Time(日历时间),epoch(时间 ......
extern "C"
extern "C"包含双重含义,其一:被它修饰的目标是“extern”的;其二:被它修饰的目标是“C”的。
1)被extern “C”限定的函数或变量是extern类型的;
extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函 ......