易截截图软件、单文件、免安装、纯绿色、仅160KB

深入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


相关文档:

C 语言 malloc 和 free函数浅谈

来自bccn C语言论坛
首先声明一点,本文为转贴。
浅谈C中的malloc和free
作者:lj_860603    阅读人次:43013    文章来源:本站原创    发布时间:2006-8-5    网友评论(32)条
原帖及讨论:http://bbs.bccn.net/thread-82212-1-1.html
    在C语言的学习中,对内 ......

C中的细节,我确实不知道

下面说到的C语言中的知识,我只是在工作中经常见到或用到,但从未深究为什么,今天才却道原来简简单单下面孕育这无穷的知识点和我的盲点,是该边学习边记录了。
预处理器(Preprocessor)
1 . 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)
         #define ......

Linux下C语言实现字符串子串替换


    由于LINUX
C没有对字符串子串替换功能,所以我自己写了一个str_replace函数,实现了字符串替换.
请大家参考.
/*
 * FUNCTION     : str_replace
 *
ABSTRACT     : replace child string in a string.
 *
PARAMETER  &nbs ......

C标准预定义宏

ANSI C标准中有几个标准预定义宏:__FILE__     __DATE__   __TIME___    __LINE__   等
__LINE__:在源代码中插入当前源代码行号;
__FILE__:在源文件中插入当前源文件名;
__DATE__:在源文件中插入当前的编译日期
__TIME__:在源文件中插入当前编译时间; ......

SD卡的写文件 以及 C中#符号

一  首先总结一下SD卡的写文件,需注意的事项如下:
1. FAT16 写的时候必须至少写一个扇区。
2. FAT表不能频繁的读写,否则会出错。申请新的一个簇时,直接在这个簇里面(即下一簇号)的写为0XFFFF。
3. FAT似乎必须转化成u16才能写。貌似是这样,具体没仔细看。
4. 获取新的索引簇的时候,直接从旧的索引簇的后面 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号