[c #] Как указать / GS, опции для приложения c #? - PullRequest
1 голос
/ 18 ноября 2009

Как вы знаете, / GS - это опции компилятора или компоновщика Visual C ++.

  1. Могу ли я указать / GS в c # компиляторе или компоновщике?

  2. Включены ли эти флаги по умолчанию в приложениях c #?

    [Изменить]: изменить содержание вопроса:

    2a. Включены ли эти функции (с помощью этих параметров компилятора, как в Visual C ++) по умолчанию в приложениях c #?

  3. Есть ли способ узнать, собирается ли файл .exe / .dll с этими флагами?

Заранее спасибо.

Ответы [ 2 ]

5 голосов
/ 18 ноября 2009

Ни одна из этих опций не существует в C #, потому что C # генерирует управляемый код, а C ++ генерирует собственный код (код машинного языка). Управляемый код называется «проверяемым», потому что он имеет гораздо более строгую проверку, чем C / C ++, и обеспечивает безопасность типов способами, недоступными для C ++ и нативного кода. (Эти проверки не имеют отношения к управляемому коду, написанному на C ++ / CLI).

Во многом это связано с тем, что этот собственный код выполняется непосредственно на оборудовании, а управляемый код выполняется внутри среды выполнения .NET (CLR).

Позвольте мне просмотреть варианты по одному

  1. / analysis - я не всем знаком с этой опцией, но, глядя на список того, что он проверяет , ни одна из этих ошибок невозможна или проблема в управляемом коде. Например, первое предупреждение C6031 не является проблемой, поскольку управляемые коды будут генерировать исключение, которое нельзя игнорировать, если оно не выполнено.
  2. / GS - Управляемый код (игнорируя unsafe ) не имеет прямого доступа к памяти и защищен от переполнения буфера. Вы получите исключение, а не переполнение в другую память.
  3. / DynamicBase - Управляемый код создает байт, называемый промежуточным языком (IL), и динамически компилируется в собственный код ( JIT ) во время выполнения, поэтому у него нет фиксированного адресного пространства для рандомизации.
  4. / SafeSEH - Управляемый код имеет собственный механизм исключений и не использует SEH.
2 голосов
/ 18 ноября 2009

Я предполагаю, что вы пытаетесь провести аудит кода / запустить инструменты статического анализа, чтобы обеспечить соблюдение рекомендаций по безопасности / SDL . Если вы продолжаете читать ...

Существует инструмент под названием Binscope , который можно использовать для проверки того, что ваши собственные двоичные файлы / C ++ скомпилированы с / GS, / SafeSEH, / NXCOMPAT и / DYNAMICBASE. Это специфичные для C ++ опции, которые затрудняют злоумышленникам использование переполнения буфера. (Binscope также проверяет несколько других вещей)

Единственное, что проверяет Binscope в C # / управляемых двоичных файлах, это если они используют строгие имена. Бинскоп для C # ближе всего: FxCop , который детализирует кучу потенциальных проблем в вашем управляемом .Net-коде. В целях безопасности исправьте все предупреждения, которые выдает FxCop, и вы уже в пути.

Флаг / analyse заставляет Visual Studio выполнить некоторый статический анализ вашего нативного кода и сообщает вам, если он обнаружил что-либо подозрительное. Эквивалент C # /. Net является частью безопасности FxCop.

...