簡體   English   中英

[c#]如何為C#應用程序指定/ GS選項?

[英][c#]How to specify /GS, options to c# application?

如您所知, / GS是Visual C ++編譯器或鏈接器選項。

  1. 我可以在C#編譯器或鏈接器中指定/ GS嗎?

  2. 這些標志在c#應用程序中是否默認啟用?

    [編輯]:更改問題內容:

    2a。 默認情況下,在c#應用程序中是否啟用了這些功能(通過Visual C ++中的這些編譯器選項)?

  3. 有沒有辦法找出使用這些標志構建的.exe / .dll文件?

提前致謝。

C#中不存在這些選項,因為C#生成托管代碼,而C ++生成本機代碼(機器語言代碼)。 托管代碼被稱為“可驗證的”,因為它比C / C ++進行更嚴格的檢查,並以C ++和本機代碼無法執行的方式強制執行類型安全。 (這些檢查與用C ++ / CLI編寫的托管代碼無關。)

這主要是由於本機代碼直接在硬件上運行,而托管代碼在.NET運行時(CLR)內運行。

請允許我一一討論

  1. / analyze-我對這個選項不是很熟悉,但是查看它所檢查列表 ,這些錯誤均不可能發生,也不是托管代碼中的問題。 例如,第一個警告C6031沒問題,因為托管代碼將引發異常,如果該異常無法成功,則將無法忽略該異常。
  2. / GS-托管代碼(忽略unsafe )不會直接訪問內存,並且不受緩沖區溢出的影響。 您將獲得一個異常,而不是溢出到其他內存中。
  3. / DynamicBase-托管代碼生成稱為中間語言(IL)的字節,並在運行時動態編譯為本機代碼( JIT ),因此它沒有固定的地址空間可隨機化。
  4. / SafeSEH-托管代碼具有其自己的異常機制,並且不使用SEH。

我猜您正在嘗試執行代碼審核/運行靜態分析工具,以確保遵循安全性/ SDL最佳實踐 如果您繼續閱讀...

有一個名為Binscope的工具,可用於檢查您的本機/ C ++二進制文件是使用/ GS,/ SafeSafeH,/ NXCOMPAT和/ DYNAMICBASE編譯的。 這些是C ++特定的選項,使攻擊者更難利用緩沖區溢出。 (Binscope還檢查其他一些內容)

Binscope在C#/托管二進制文件中唯一要檢查的是它們是否使用強名稱。 最接近C#的binscope的是FxCop ,它將詳細說明托管的.Net代碼中的一系列潛在問題。 為了安全起見,請修復FxCop產生的所有安全警告,並且您在旅途中。

/ analyze標志使Visual Studio對您的本機代碼進行靜態分析,並讓您知道它是否發現可疑的內容。 C#/。Net等效項是FxCop的安全性部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM