[c#]如何指定/GS,c#应用程序的选项?
Posted
技术标签:
【中文标题】[c#]如何指定/GS,c#应用程序的选项?【英文标题】:[c#]How to specify /GS, options to c# application? 【发布时间】:2009-11-18 04:11:20 【问题描述】:如您所知,/GS 是 Visual C++ 编译器或链接器选项。
我可以在 c# 编译器或链接器中指定 /GS 吗?
这些标志在 c# 应用程序中是否默认启用?
[编辑]:更改问题内容:
2a。是否启用了这些功能(通过这些编译器选项,如在 Visual C++ 中) 默认在 c# 应用程序中?
有没有办法查明 .exe/.dll 文件是否使用这些标志构建?
提前致谢。
【问题讨论】:
【参考方案1】:C# 中不存在这些选项,因为 C# 生成托管代码,而 C++ 生成本机代码(机器语言代码)。托管代码被称为“可验证”,因为它具有比 C/C++ 更严格的检查,并以 C++ 和本机代码无法做到的方式强制执行类型安全。 (这些检查与用 C++/CLI 编写的托管代码无关)。
这在很大程度上是由于本机代码直接在硬件上运行而托管代码在 .NET 运行时 (CLR) 内运行。
请允许我一一浏览选项
-
/analyze - 我对这个选项并不十分熟悉,但看看list of what it checks,这些错误都不可能出现,也不是托管代码中的问题。例如第一个警告 C6031 不是问题,因为托管代码会在不成功时抛出一个无法忽略的异常。
/GS - 托管代码(忽略unsafe)不直接访问内存并且不受缓冲区溢出的影响。你会得到一个异常而不是溢出到其他内存中。
/DynamicBase - 托管代码生成称为中间语言 (IL) 的字节,并在运行时动态编译为本机代码 (JIT),因此它没有固定的地址空间可随机化。
/SafeSEH - 托管代码有自己的异常机制,不使用 SEH。
【讨论】:
感谢您的深入分析。【参考方案2】:我猜您正在尝试进行代码审核/运行静态分析工具以确保遵循 security/SDL best practices。如果您继续阅读...
有一个名为Binscope 的工具可用于检查您的本机/C++ 二进制文件是否使用/GS、/SafeSEH、/NXCOMPAT 和/DYNAMICBASE 编译。这些是 C++ 特定的选项,使攻击者更难利用缓冲区溢出。 (Binscope 还会检查其他一些东西)
Binscope 在 C#/托管二进制文件中唯一检查的是它们是否使用强名称。与 C# 的 binscope 最接近的是 FxCop,它将详细说明托管 .Net 代码中的一系列潜在问题。为了安全起见,请修复 FxCop 产生的所有安全警告,然后您就可以使用了。
/analyze 标志会导致 Visual Studio 对您的本机代码进行一些静态分析,并让您知道它是否发现任何可疑内容。 C#/.Net 等价物是 FxCop 的安全部分。
【讨论】:
感谢您的帮助。 BinScope 真的帮助了我。以上是关于[c#]如何指定/GS,c#应用程序的选项?的主要内容,如果未能解决你的问题,请参考以下文章
如何捕获从 SQL Server 到 C# 应用程序的消息选项卡的所有内容?