1

ご存知のように、/GS はVisualC++コンパイラまたはリンカーオプションです。

  1. c#コンパイラまたはリンカで/ GSを指定できますか?

  2. これらのフラグは、C#アプリケーションでデフォルトで有効になっていますか?

    [編集]:質問の内容を変更します:

    2a。これらの機能は、C#アプリケーションでデフォルトで有効になっていますか(Visual C ++のようにこれらのコンパイラオプションによって)?

  3. .exe / .dllファイルがこれらのフラグでビルドされているかどうかを確認する方法はありますか?

前もって感謝します。

4

2 に答える 2

6

C#はマネージコードを生成し、C ++はネイティブコード(機械語コード)を生成するため、これらのオプションはいずれもC#には存在しません。マネージコードは、C / C ++よりもはるかに厳密なチェックがあり、C ++やネイティブコードでは不可能な方法で型の安全性を強化するため、「検証可能」と呼ばれます。(これらのチェックは、C ++ / CLIで記述されたマネージコードには関係ありません)。

これの多くは、ネイティブコードがハードウェア上で直接実行され、マネージコードが.NETランタイム(CLR)内で実行されるという事実によるものです。

オプションを1つずつ確認させてください

  1. / analysis-私はこのオプションに精通しているわけではありませんが、チェック対象のリストを見ると、これらのエラーは発生しないか、マネージコードに問題があります。たとえば、最初の警告C6031は問題ではありません。これは、マネージコードが例外をスローし、成功しない場合は無視できないためです。
  2. / GS-マネージコード(安全でないものを無視する)はメモリに直接アクセスせず、バッファオーバーフローの影響を受けません。他のメモリにオーバーフローするのではなく、例外が発生します。
  3. / DynamicBase-マネージコードは中間言語(IL)と呼ばれるバイトを生成し、実行時にネイティブコード( JIT )に動的にコンパイルされるため、ランダム化するための固定アドレス空間はありません。
  4. / SafeSEH-マネージコードには独自の例外メカニズムがあり、SEHを使用しません。
于 2009-11-18T05:55:34.070 に答える
2

セキュリティ/SDLのベストプラクティスに従っていることを確認するために、コード監査/静的分析ツールを実行しようとしていると思います。あなたが読み続けるなら...

ネイティブ/C++バイナリが/GS、/ SafeSEH、/ NXCOMPAT、および/DYNAMICBASEでコンパイルされていることを確認するために使用できるBinscopeと呼ばれるツールがあります。これらはC++固有のオプションであり、攻撃者がバッファオーバーランを悪用するのを困難にします。(Binscopeは他にもいくつかチェックします)

BinscopeがC#/マネージバイナリでチェックするのは、厳密な名前を使用しているかどうかだけです。C#のbinscopeに最も近いのは、管理対象の.Netコードの潜在的な問題の詳細を示すFxCopです。セキュリティのために、FxCopが生成するセキュリティ警告を修正してください。

/ analysisフラグを使用すると、Visual Studioはネイティブコードの静的分析を実行し、疑わしいものが見つかったかどうかを通知します。C#/。Netに相当するものは、FxCopのセキュリティ部分です。

于 2009-11-18T05:12:15.233 に答える