Из ссылки C# для stackalloc:защита от переполнения буфера для stackalloc в .NET
использование stackalloc автоматически включает переполнение буфера функцию обнаружения в общеязыковой среде выполнения (CLR). Если обнаружено переполнение буфера, процесс прекращается как можно быстрее, чтобы свести к минимуму вероятность того, что вредоносный код будет выполнен.
В частности, какой механизм защиты реализован для .NET?
И будет ли это также обнаружение переполнения буфера? Против каких известных атак защита слабее?
Для контекста, например, для компилятора MS C++ информация доступна здесь:
Windows ISV Software Security Defenses:
Стек буфера обнаружения перерасход был введен в/C++ компилятор C в Visual Studio .NET 2002 и был обновлен в последующих версиях./GS - это компилятор, который инструктирует компилятор добавить код запуска и функцию epilog и пролог, чтобы генерировать и проверять случайное число, которое помещается в стек функции.
Обратите внимание, что Visual C++ 2005 (и более поздняя версия) также переупорядочивает данные в стеке, чтобы усложнить предсказуемое повреждение этих данных. Примеры включают:
• Перемещение буферов в более высокую память, чем небуферы. Этот шаг может помочь защитить указатели функций, которые находятся в стеке.
• Перемещение указателей и аргументов буфера для уменьшения объема памяти во время выполнения, чтобы уменьшить различные атаки переполнения буфера.