如您所知,/GS是Visual C ++编译器或链接器选项。
我可以在c#编译器或链接器中指定/ GS吗?
c#应用程序默认启用这些标志吗?
[编辑]:更改问题内容:
2a上。是否启用了这些功能(通过Visual C ++中的这些编译器选项) 默认情况下在c#应用程序中?
有没有办法找出使用这些标志构建.exe / .dll文件?
提前致谢。
答案 0 :(得分:5)
C#中不存在这些选项,因为C#生成托管代码,C ++生成本机代码(机器语言代码)。托管代码被称为“可验证”,因为它比C / C ++具有更严格的检查,并以C ++和本机代码无法实现的方式强制执行类型安全。 (这些检查与使用C ++ / CLI编写的托管代码无关)。
这很大程度上是因为本机代码直接在硬件上运行,托管代码在.NET运行时(CLR)内运行。
请允许我逐一查看选项
答案 1 :(得分:2)
我猜你试图进行代码审核/运行静态分析工具以确保遵循security/SDL best practices。如果你继续阅读......
有一个名为Binscope的工具可用于检查您的native / C ++二进制文件是使用/ GS,/ SafeSEH,/ NXCOMPAT和/ DYNAMICBASE编译的。这些是特定于C ++的选项,使攻击者更难以利用缓冲区溢出。 (Binscope还会检查其他一些事情)
Binscope在C#/托管二进制文件中唯一检查的是它们是否使用强名称。与C#的binscope最接近的是FxCop,它将详细说明托管.Net代码中的一系列潜在问题。为了安全起见,请修复FxCop产生的任何安全警告,并且即将开始。
/ analyze标志使Visual Studio对您的本机代码进行一些静态分析,并让您知道它是否发现任何可疑内容。 C#/ .Net等价物是FxCop的安全部分。