-fstack-check
: Если два стандартных макроса STACK_CHECK_BUILTIN
и STACK_CHECK_STATIC_BUILTIN
остаются с значением по умолчанию 0, он просто вставляет нулевой байт каждые 4 КБ (страницы), когда стек увеличивается.
По умолчанию только одна, но когда в стеке может расти больше одной страницы, что является наиболее опасным случаем, каждые 4 КБ. У linux> 2.6 только один маленький пробел между стеком и кучей, что может привести к атакам на стек, известным с 2005 года.
См. Какое исключение вызывается в C опцией GCC -fstack-check для сборки.
Он включен в gcc как минимум с 2.95.3, в clang с 3.6.
__stack_chk_fail
- это вставленный код -fstack-protector
, который проверяет вставленное канареечное значение стека, которое может быть перезаписано простым переполнением стека, например, по рекурсии.