Visual Studio中的GS选项
GS option in Visual Studio
我有代码:
#include "stdafx.h"
#include <iostream>
using namespace std;
int main(int argc, char *argv[]) {
char buf[3];
cout<<"before"<<endl;
strcpy(buf,argv[1]);
cout<<"after"<<endl;
return 0;
}
我的论点是" 123456",我会出现错误溢出。当我使用/gs和/gs关闭时,工作中没有什么不同。为什么?我总是以前,之后打印并获得错误。我认为返回地址已重新持有。但是我该如何检查?
/GS
开关仅将检查插入其识别为缓冲区超支问题的函数>"。特别是:
在A GS缓冲区上执行缓冲区超级安全检查。A GS 缓冲区可以是其中之一:
- 一个大于4个字节的数组具有两个以上的元素,并且具有指针类型的元素类型。
- 大小超过8个字节并且不包含指针的数据结构。
- 使用`_AlloCa函数分配的缓冲区。
- 任何包含GS缓冲区的类或结构。
由于您的缓冲区小于4个字节,因此不被视为GS缓冲区,因此未插入检查。
但是,即使增加了缓冲区的大小并触发溢出,也不会看到差异,因为当main
返回时,即在打印两条消息后,检查仅完成。为了测试其有效 #include <iostream>
using namespace std;
int setarg(char * arg)
{
char buf[5];
strcpy(buf,arg);
return buf[0];
}
int main(int argc, char *argv[]) {
cout<<"before"<<endl;
if ( argc >1 )
setarg(argv[1]);
cout<<"after"<<endl;
return 0;
}
相关文章:
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- Win32编译器选项和内存分配
- C/C++预处理器是否可以检测一些编译器选项
- 是否有C++编译器选项允许激进地删除所有函数调用,并将参数传递给具有空体的函数
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- 通过选项卡的文本设置QTabWidget顺序
- 通过ccmake在cmake中缓存依赖选项
- 如何传递多个 std::文件系统选项?
- 基于编译器选项的编译二进制路径
- "perf_event_attr"结构的"read_format"属性的选项到底是什么?
- 如何应用 libcurl 的持久连接选项
- 文件中.dat Dlib 选项
- LLVM | codegen 用于带有命令行选项的程序输入功能
- 编译 Boost 时在 OS X 上的"ld:未知选项:-soname"
- 按钮悬停在 QT 中垂直布局的选项卡小部件中不起作用
- Visual Studio C++ 它只构建选项卡中显示的文件吗?
- Visual Studio中的GS选项
- /gs选项导致程序引发异常
- Visual Studio C++编译器选项:为什么 /O2 定义 /Gs
- 了解 MSVC++ 中的"Buffer Security Check /GS"编译器选项