Защита стека - это стратегия защиты, а не стратегия отладки. Если ваша игра работает в сети или содержит данные, поступающие из неконтролируемого источника, включите ее. Если данные не поступают из-под контроля, не включайте их.
Вот как это работает: если у вас есть ошибка и вы меняете буфер, основываясь на том, что злоумышленник может контролировать, этот злоумышленник может перезаписать адрес возврата или аналогичные части стека, чтобы он выполнял свой код вместо вашего код. Защита стека прервет вашу программу, если обнаружит это. Ваши пользователи не будут счастливы, но они также не будут взломаны. Это не тот тип взлома, который связан с мошенничеством в игре, это тип взлома, когда кто-то использует уязвимость в вашем коде для создания эксплойта, потенциально заражающего вашего пользователя.
Для решений, ориентированных на отладку, смотрите на такие вещи, как mudflap.
Что касается ваших конкретных вопросов:
- Используйте средство защиты стека, если вы получаете данные из неконтролируемых источников. Ответ на это, вероятно, да. Так что используйте это. Даже если у вас нет данных из неконтролируемых источников, вы, вероятно, в конечном итоге или уже будете иметь и не осознавать это.
Можно использовать защиту стека для всех буферов, если вы хотите дополнительную защиту в обмен на некоторое снижение производительности. Из gcc4.4.2 руководство :
-fstack-протектор
Выдать дополнительный код для проверки переполнения буфера, такого как атаки с разбивкой стека. Это делается путем добавления переменной защиты к функциям с уязвимыми объектами. Это включает в себя функции, которые вызывают alloca, и функции с буферами размером более 8 байт. Защитные устройства инициализируются при входе в функцию, а затем проверяются при выходе из функции. Если контрольная проверка не пройдена, выводится сообщение об ошибке и программа завершается.
-fstack-протектор-все
Как -fstack-protector за исключением того, что все функции защищены.
В предупреждениях указано, какие буферы не может защитить защита стека.
- Это не обязательно означает уменьшение минимального размера буфера, а при размере 0/1 он такой же, как и для stack-protector-all. Он только указывает вам на это, чтобы вы могли, если вы решите изменить код, чтобы буфер был защищен.
- Нет, эти предупреждения не представляют проблем, они просто указывают вам информацию. Не используйте их регулярно.