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