[c#]如何指定/ GS,c#应用程序的选项?

whu*_*nmr 1 c# compiler-options

如您所知,/ GS 是Visual C++编译器或链接器选项.

  1. 我可以在c#编译器或链接器中指定/ GS吗?

  2. 这些标志是否在c#应用程序中默认启用?

    [编辑]:更改问题内容:

    2A.这些功能是否在c#应用程序中默认启用(通过Visual C++中的这些编译器选项)?

  3. 有没有办法找出使用这些标志构建.exe/.dll文件?

提前致谢.

shf*_*301 5

C#中不存在这些选项,因为C#生成托管代码,C++生成本机代码(机器语言代码).托管代码被称为"可验证",因为它比C/C++具有更严格的检查,并以C++和本机代码无法实现的方式强制执行类型安全.(这些检查与使用C++/CLI编写的托管代码无关).

其中很大一部分原因是本机代码直接在硬件上运行,托管代码在.NET运行时(CLR)内运行.

请允许我逐一审查这些选项

  1. / analyze - 我并不熟悉这个选项,但查看它检查列表,这些错误都不可能或托管代码中存在问题.例如,第一个警告C6031不是问题,因为托管代码将抛出一个异常,当它不成功时不能忽略.
  2. / GS - 托管代码(忽略不安全)不直接访问内存,不受缓冲区溢出的影响.你会得到一个异常,而不是溢出到其他内存中.
  3. / DynamicBase - 托管代码生成称为中间语言(IL)的字节,并在运行时动态编译为本机代码(JIT),因此它没有固定的地址空间来随机化.
  4. / SafeSEH - 托管代码具有自己的异常机制,不使用SEH.