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