Когда и как использовать функцию защиты стека GCC?
Я включил-Wstack-protector
предупреждение при компиляции проекта I 'я работаю (коммерческий многоплатформенный игровой движок C ++, компилируемый на Mac OS X 10.6 с GCC 4.2). Этот флаг предупреждает о функциях, которые не будут защищены от разрушения стека, даже если-fstack-protector
включен. GCC выдает некоторые предупреждения при сборке проекта:
не защищающая функция: нет буфера длиной не менее 8 байт
не защищает локальные переменные: буфер переменной длины
Для первого предупреждения я обнаружил, что можно настроить минимальный размер, который должен иметь буфер при использовании в функции, чтобы эта функция была защищена от разрушения стека:--param ssp-buffer-size=X
может использоваться, где X по умолчанию 8 и может быть всего 1.
Для второго предупреждения я могуподавить его появление, если я не перестану использовать.-Wstack-protector
-fstack-protector
использоваться? (как, например, все время во время разработки или просто при обнаружении ошибок?)Когда следует-fstack-protector-all
использоваться?Что такое-Wstack-protector
рассказывая мне? Предлагает ли я уменьшить минимальный размер буфера?Если это так, есть ли недостатки в размере до 1?Похоже, что-Wstack-protector
это не тот флаг, который вы хотите включить постоянно, если вы хотите сборку без предупреждений. Это правильно?