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