vs/c++缓冲区溢出,未初始化变量检查
缓冲区溢出(buffer overrun)是c/c++开发中比较令人头痛的问题,vs2005中有若干编译选项
可以有效的帮助程序员定位这些问题:
1,/GS:优化模式下有效,检测缓冲区溢出,只能检测出覆盖了返回地址的情况.
2,/RTCs:优化模式下无效,检测缓冲区溢出
{
char buffer1[100];
char buffer2[100];
buffer1[0] = 0;
for (int i=0 ; i <= sizeof(buffer2); i++)
{
buffer2[i] = 'a';
}
buffer2[sizeof(buffer2)-1] = 0;//检测出buffer2溢出,上面的for中应该使用<而不是<=
cout << buffer2 << '-' << buffer1 << endl;
}
注:以上方法只能检测栈中的内存溢出,对于堆的内存(new出来的内存)溢出无效.
3,/RTCc: 优化模式下无效,可以检测出数据截断的情况
{
unsigned char ch;
ch = (unsigned char)value;//检测出错误!
}
4,/RTCu:优化模式下无效,检测使用未初始化的变量
{
int i;
int k = i * 100; //检测出错误!
}
参考:
1,http://msdn.microsoft.com/en-us/library/aa289171.aspx
2,http://msdn.microsoft.com/en-us/library/aa290051.aspx
转载于:https://www.cnblogs.com/corefans/archive/2008/12/18/1357845.html
vs/c++缓冲区溢出,未初始化变量检查相关推荐
- python变量初始化的位置不当、程序结果可能会出现问题_解决tensorflow由于未初始化变量而导致的错误问题...
我写的这个程序 import tensorflow as tf sess=tf.InteractiveSession() x=tf.Variable([1.0,2.0]) a=tf.constant( ...
- [ARM-assembly]-全局变量/静态全局变量/初始化/未初始化变量的存放位置分析
我们从汇编来看,各种变量在内存中的存放位置 1.使用交叉编译器将C语言转换成汇编 写一个C语言程序: static int x; static int y = 10; int z; int w = 2 ...
- 变量的初始化与使用C语言程序注释,c - (为什么)使用未初始化的变量未定义行为?...
C标准为编译器提供了很大的优势来执行优化. 如果您假设一个简单的程序模型,其中未初始化的内存被设置为某个随机位模式,并且所有操作都按照它们的写入顺序执行,那么这些优化的后果可能会令人惊讶. 注意:以下 ...
- C语言中变量未初始化的处理
实例测试1--DEV-C++环境 : #include <stdio.h> //全局整形变量 int int_var1; static int stc_int_var1; short in ...
- 堆栈的缓冲区溢出进不了系统_一文理解缓冲区溢出
1 引言 "缓冲区溢出"对现代操作系统与编译器来讲已经不是什么大问题,但是作为一个合格的 C/C++ 程序员,还是完全有必要了解它的整个细节. 计算机程序一般都会使用到一些内存,这 ...
- C ++标准是否允许未初始化的bool使程序崩溃?
本文翻译自:Does the C++ standard allow for an uninitialized bool to crash a program? I know that an " ...
- 游戏安全03:缓冲区溢出攻击简单解释
文章目录 一.举例具体体现 二.缓冲区溢出攻击原理 (1)栈帧基础原理 (2)函数调用约定 (3)溢出攻击原理 (4)缓冲区溢出攻击分类和举例 1)没有保证足够的存储空间存储复制过来的数据 2)整数溢 ...
- CSP认证 202203-1 未初始化警告
题目传送门 题目背景 一个未经初始化的变量,里面存储的值可能是任意的.因此直接使用未初始化的变量,比如将其赋值给另一个变量,并不符合一般的编程逻辑.代码中出现这种情况,往往是因为遗漏了初始化语句.或是 ...
- 4454. 未初始化警告(只是题的长别怕,详细解读)
题目 一个未经初始化的变量,里面存储的值可能是任意的. 因此直接使用未初始化的变量,比如将其赋值给另一个变量,并不符合一般的编程逻辑. 代码中出现这种情况,往往是因为遗漏了初始化语句.或是打错了变量名 ...
最新文章
- js中Object类型和Array类型的变量被赋值(复制)给其他变量后,修改被赋值(复制)的新变量的值,会影响原始变量的值,这是为什么呢?
- linux添加审计账户_眼镜蛇W眼镜蛇白盒品白源代码审计工具 白帽子版
- 超1亿人选择朋友圈三天可见,背后的原因值得深思
- 读过的最好的epoll讲解
- mysql 组合索引 or_mysql索引优化实例(单列索引与组合索引)
- spring cloud微服务分布式云架构-commonservice-config配置服务搭建
- 谷歌发布 V8 Exploit 漏洞奖励计划,奖金加倍
- JavaScript执行环境
- 双轨制直销软件功能介绍
- 数学建模竞赛大汇总,别再被野鸡竞赛坑啦
- 吕林涛计算机网络知识点,计算机网络——习题与解析
- 2017 linux wine 迅雷,wine 迅雷下载安装(wine 迅雷极速版)【Linux上用迅雷7】
- 新站快速排名的seo优化流程
- 【02】Java进阶:04-String、StringBuilder、ArrayList
- java throw 和catch_Java catch与throw同时使用的操作
- prod和probor在matlab,智能控制讲义第六章Matlab在模糊控制中的应用.
- 两个PDF怎么合成在一起
- C# dotnet 获取某个字符所在 Unicode 字符平面映射
- 微信小程序顶部透明状态标题栏搜索栏与胶囊对齐
- VC知识库之应用控制