VS常见编译选项总结

栈溢出防御之——Windows安全机制GS编译选项 安全漏洞中有个重灾区:栈溢出。利用类似memset之类的字符串修改函数,输入超出正常长度的字符串,导致栈溢出,从而影响其它数据(返回地址、标志变量等)。 维基百科给出的资料http://zh.wikipedia.org/wiki/%E5%A0%86%E6%A0%88%E6%BA%A2%E5%87%BA主要是函数无限调用导致的堆栈溢出,下面给出个0day2里面的例子温习下栈溢出: #includ 阅读详情

VS常见编译选项总结

UEFI工程中的tools_def.txt就设置了不同版本VS编译器的C默认全局编译选项,以2015为例,分Debug/Release/NOOPT三种进行描述:

DEBUG_VS2015_IA32_CC_FLAGS      = /nologo /arch:IA32 /c /WX /GS- /W4 /Gs32768 /D UNICODE /O1b2 /GL /FIAutoGen.h /EHs-c- /GR- /GF /Gy /Z7 /Gw
RELEASE_VS2015_IA32_CC_FLAGS      = /nologo /arch:IA32 /c /WX /GS- /W4 /Gs32768 /D UNICODE /O1b2 /GL /FIAutoGen.h /EHs-c- /GR- /GF /Gw
NOOPT_VS2015_IA32_CC_FLAGS        = /nologo /arch:IA32 /c /WX /GS- /W4 /Gs32768 /D UNICODE /FIAutoGen.h /EHs-c- /GR- /GF /Gy /Z7 /Od

这些编译选项在各大工程中经常会遇到,但其具体代表什么意思呢?
下面one by one的解释/总结下:

OptionPurpose
/nologo编译的过程中不显示编译器版本信息
/arch指定编译产生何种架构的汇编指令,X64 or IA32 or ARM
/c在编译过程中只会产生.obj文件,不会隐性的链接库文件;如果要链接,需要显性使用/LINK
/WX将编译过程产生的所有警告均视为错误
/GS-不去做Buffer Security Check/堆栈安全性检查
W4编译过程中会打印level4/最高级别的waring message
/Gs[size]针对c function加入size大小的堆栈探针,以应对局部变量所需空间的不足
/D编译进预处理的符号,类似工程的宏
/O1b2=/O1 /Ob2 优化选项,采用最小空间代码编译以及展开内嵌函数
/GL使能代码整体优化
/FI[ ]pathname强制包含pathname下的头文件
/EHs-c-不会忽略structured和C++异常
GR-禁止runtime类型的object types检查
/GF将相同的string放在同一块mem地址上
/Gy允许编译器打包function
/Z7编译生成的.obj包含所有的debug symbols
/Gw允许编译器打包global data

其他的编译选项可在微软的Compiler Options中查询:
在这里插入图片描述每一种编译选项所造成的具体差异,还有待在工程实践中逐一探索,thks!

VS 设置编译器和生成属性 VS项目属性; 阅读详情

相关推荐

VS2019环境下编译FFMPEG5.2详细指南

FFMpeg是一个开源的多媒体框架,用于录制、转换数字音视频,并能够将其流化。自2000年由Fabrice Bellard创建以来,FFMpeg迅速发展成为一个功能强大的多媒体处理工具集,被广泛应用于视频编辑、转换、流媒体和播放器等领域。

weixin_33812391的博客 816

Visual Studio编译选项简介

真正对项目编译起作用的是主面板里的设置,而最上面的设置可以把它想像成主面板相对应设置集的一种编译策略的名字。举个例子,你可以建一个名叫M的配置,M显示在最上面的配置下拉框里,其中前三个项目是Debug模式,后两个是Release模式,然后再建一个名叫N的平台,N将显示在最上面的平台下拉框里,其中第一个是X86,后面四个是X64模式。如果是X86编译,PE:PE32,32BIT:1,如果是X64编译,PE:PE32+,32BIT:0,如果是AnyCpu编译,PE:PE32,32BIT:0。

weixin_39584669的博客 1509

西瓜书第二章——模型评估与选择(十折交叉验证/查准查全F1)

第二章——模型评估与选择

xsddys的博客 953

vs中编译选项MD、MDd、MT的区别

1.编译选项的位置: 属性->C/C++->代码生成->运行库 2.选项代表的含义: 简而言之, /MD表示运行时库不集成,生成的文件小; /MT表示运行时库集成,生成的文件较大。 3.如何选择 选/MD的理由:文件小,使用的是同一个堆,不存在A申请,B释放的问题; 选/MT的理由:移植性好,减少依赖。 4.可能出现的错误: 错误 23 error LNK1104: 无

uncle_simle的博客 1727

米哈游 AI产品经理面试题精选:10道高频考题+答案解析(附PDF)

米哈游是全球知名游戏开发商,以《原神》《崩坏》系列著称,专注二次元文化与AI技术创新。本文整理了10道AI产品经理面试题,涵盖Transformer架构、智能NPC设计、机器学习应用、AIGC产品规划等核心领域。题目既考察技术理解(如RAG原理、多模态模型),又关注产品落地(游戏平衡性优化、伦理安全),同时强调跨团队协作能力。参考答案均结合米哈游业务场景,体现技术驱动与玩家体验并重的产品思维,展现AI在游戏行业的创新应用前景。

ZHHHHH15的博客 682

c语言【分糖果】2023蓝桥杯4124(枚举,递归,dfs)

但是这是不符合我们糖果刚好分完的条件的,我们应该往回退到上一层,也就是孩子6这层,然后j+1=3,孩子7分到3个第二种糖果,这也不符合我们糖果刚好分完的条件,然后就会再次回退到孩子6这里,然后j+1=4,让我们的孩子7获得5块第二种糖果,然后还是不符合糖果刚分完的条件,于是再一次退回到孩子6这里,然后就会有外循环i+1=1,j=1,孩子7分到1块第一种糖果1块第二块糖果......然后就是这样的不停地回溯,试探,直到把整棵树遍历一遍,并且记录所有的满足条件的组合。先放一下我的代码,我的代码超时啦救命!

weixin_74331419的博客 732

C/C++ 编译器选项

E:/CEGUI/tolua++-1.0.92/src/tests.simon>cl /?用于 80x86 的 Microsoft (R) 32 位 C/C++ 优化编译器 14.00.50727.762 版版权所有(C) Microsoft Corporation。保留

乔成磊的专栏 1419

Docker 安装 CentOS7

本文主要介绍了docker 下安装centos7。访问 CentOS 镜像库地址:https://hub.docker.com/_/centos?tab=tags&page=1。可以通过 Sort by 查看其他版本的 CentOS 。默认是最新版本 centos:latest 。 使用以下命令来查看是否已安装了 centos7: 启动centos容器,并把docker上centos的22端口映射到本机60001端口(端口号可以自己指定) 3、进入到Centos容器 4.安装ssh服务和网络必须软件

折腾java的博客 1万+

vs的一些编译选项(持续更新)

文章目录提高编译速度的选项/MP/Gm-预编译头 提高编译速度的选项 /MP 开启多线程编译,默认时开启的状态,注意该选项和下面的/Gm-选项是互相冲突的,即开启了该选项,就必须关闭Gm-选项,否则多线程编译无法生效; vs设置:c/c++ 》 常规 》 多处理器编译。默认是打开状态 /Gm- (已弃用)开启这个选项后,一些修改的头文件可能不会被重新编译。这个选项在新版本的编译器中已被弃用。为了缩短生成时间,建议改为使用预编译标头和增量和并行生成(/MP)选项。 vs设置:c/c++ 》 代码生成 》启用最

j_shui的博客 2097

渗透测试实战—云渗透(AK/SK泄露)

渗透测试实战思路分享:getshell方法及横向移动方法,云安全(AK/SK泄露)

网安日记本的博客 4051

储能电池管理系统介绍(一)

介绍储能BMS的架构以及各模块功能

manjixingkong1234的专栏 1916

使用VS2010编译QT

首先不要使用中文目录,   发布QT程序时,为了使没有QT依赖库的环境中也能运行QT程序,这就需要静态编译你的QT程序。要达到这个目的,首先必须静态编译你的QT库文件 1 下载Qt的安装包和VS2010的Qt插件 2. 安装Qt Library, 注意不能装Qt

aslucky的专栏 2万+

UE5 Niagara基础知识讲解

在UE5版本中,Niagara粒子系统引入了许多可添加的模块,分别用于控制发射器的生成和更新、粒子的生成和更新以及渲染效果。本文采用虚幻5.2.1版本,以图文方式对Niagara基础知识进行讲解。

一碗清深的博客 2472

googletest mock设置 编译器选项 vs下

googletest正在学习中,大体了解了是什么东西。googletest则是一种expect eq规则,期望获得所需要的结果。mock则是模拟一种外部接口,让他提供特定情况下的返回值。粗以为是一种定义好的大型宏替换。 vs编译选项 /MD /mt  m为多线程或许是multithread,d为ddl  、/MDd 为debug版本,没有d为release版本。release会有优化。m

Hello world! 1352

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

VS2019 编译 x64 QT5.9.5

1.将源码解压到磁盘根目录, 安装Qt的时候没有装到磁盘根目录,导致路径太长了,会莫名的报找不到文件或者ninja subcommand failed. 2.安装好 * Perl version 5.12 or later [http://www.activestate.com/activeperl/] * Python version 2.7 or later [http://www.activestate.com/activepython/] * Ruby version 1.9.3 o...

TravellerAndFlying的博客 1384

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

编译 CTK(Win10 + Qt 5.5 + VS2013)

编译 CTK(Win10 + Qt 5.5 + VS2013)前期准备一级目录 前期准备 在编译CTK之前需要先准备好相应的编译环境和CTK源码,这里默认大家已经安装好QT和Visual Studio,如果没有安装好的,请提前安装好相关软件 CTK源码地址:CTK的github地址 一级目录 ...

qq_39376160的博客 1429

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

VS2012环境编译驱动(根据网络教程改编)

VS2012环境编译驱动 准备:安装VS2012    "G:\Microsoft Visual Studio 11.0\Common7\IDE\devenv.exe"              安装WINDDK    C:\WinDDK VS2012驱动编译配置 VS2012集成环境下编译驱动   1)打开VS新建一个空的 win32控制台程序 1、选(文件→新建→项目→Visua

dfhemst19920518的博客 1157

win7、vs2013编译webkit总结

在windows7、vs2013环境下编译webkit,本人测试成功 1、解压cygwin到C盘下(建议放在C盘更目录下,否则编译期间会有部分文件找不到)     启动命令:C:\cygwin\bin\mintty.exe -i /Cygwin-Terminal.ico -     也可以从Cygwin.bat启动(若不是安装在C盘,则启动不了)     【注意】cygwin要用针对web

小狗狗的专栏 1363

vs2010编译qt4.8

vs2010编译qt4.8 1.使用vs2010自带的命令行进入qt目录,进入mkspecs\win32-msvc2010\qmake.conf查看编译选项,配置内置wchr_t语言,修改如下选项(如有项目使用wchar_t,qt却编译成wchar_t-,编译会导致连接错误,提示找不到Qwstring): QMAKE_CFLAGS            = -nologo -Zm200 -Zc

xxq123321的专栏 1768

Qt在vs2010下的配置

首先不要使用中文目录,   1 下载Qt的安装包和VS2010的Qt插件 2. 安装Qt SDK 3. 安装Qt的VS开发插件 4. 编译Qt Qt默认使用mingw进行编译,如果要使用VS2010开发,需要将Qt重新编译。 进入开始菜单Microsoft Visual Studio 2010,Visual Studio Tools,Visual Stud

记事本 1294

VS编译器 :LNK链接错误汇总:LNK2001 / LNK2005 / LNK2019 / LNK1120

VS编译期间遇到各式各样的链接LNK错误,作一汇总: LNK1120: 1 个无法解析的外部命令 这个问题的原因是有头文件,但是找不到实现。 有两个原因:1.只包含了头文件,只有这个函数的声明,没有包含这个函数的实现(实现一般放在cpp文件中的)。所以只能通过编译,连接不成功。 2.另一个原因是函数的声明和实现都放在头文件中了,一般要把声明放头文件中,实现放在cpp文件中。这样每个#include...

现从事游戏开发领域 | 团队项目be_with开发进行中 web方向感兴趣者私 ——We can do all things. 9209

vs2010 使用QT

首先不要使用中文目录, 1 下载Qt的安装包和VS2010的Qt插件2. 安装Qt SDK3. 安装Qt的VS开发插件4. 编译QtQt默认使用mingw进行编译,如果要使用VS2010开发,需要将Qt重新编译。进入开始菜单Microsoft Visual Studio 2010,Visual Studio Tools,Visual Studio Command Pro

aslucky的专栏 1万+

VS + cmake 手动编译配置OpenCV

这个学期上计算机视觉,光配环境就捣鼓了好长时间。 在OpenCV官网上下载源码,在github上下载opencv_contrib。 在cmake上要选择win64的那个选项这样我们进VS项目的时候才能以X64编译。 选择解压完的的源码文件夹,点configure,configure之后好多都是红的,然后extra_module_path里面填contrib文件夹里面module的目录,你要是只想生...

weixin_41563931的博客 415

一个VC的"命令行选项不兼容"错误的解决

今天用VS2015编译一个从低版本转换来的工程,报了一个错误: 1>cl : 命令行 error D8016: “/ZI”和“/Gy-”命令行选项不兼容 这个有点让人摸不着头脑,实际上呢,VC的编译,是通过cl这个工具进行的,也就是一个命令行,在工程的属性页里的配置的工作等于是以可视化的方式设置选项。而这里的/ZI和/Gy-两个选项是不兼容的,就是说不能同时存在。既然启用了/ZI选项,/...

格物致知的专栏 [音视频编解码 网络协议 计算机视觉 计算机图形学 图像理解 语音识别 机器学习 模拟电路 传感器] 1259
上一篇: 浅谈三极管、运放、MOS管驱动 的常见电路
下一篇: RISC-V指令与寄存器
Cerman
博客等级 码龄11年 63粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cerman

你的鼓励是探索和创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值