Как работает опция gcc -fstack-check? - PullRequest
8 голосов
/ 03 марта 2010

Моя программа потерпела крах, когда я добавил опции -fstack-check и -fstack-protector. __stack_chk_fail вызывается в обратной трассировке.

Так, как я мог знать, где проблема? Что -fstack-check действительно проверяет? Информация о gcc кажется слишком большой, чтобы найти ответ.

Ответы [ 3 ]

6 голосов
/ 23 марта 2010

После проверил программу сборки. Я думаю -fstack-check, добавит запись кода 0 к смещению указателя стека, поэтому, чтобы проверить, если программа посещает адрес нарушения, программа потерпела крах, если это произойдет. например mov $ 0x0, -0x928 (% esp)

3 голосов
/ 21 июня 2017

-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, который проверяет вставленное канареечное значение стека, которое может быть перезаписано простым переполнением стека, например, по рекурсии.

3 голосов
/ 03 марта 2010

"-fstack-protector" выдает дополнительный код для проверки переполнения буфера, например стека сокрушительные атаки. Это делается путем добавления защитной переменной в работает с уязвимыми объектами. Это включает в себя функции, которые Вызовите alloca и функции с буферами размером более 8 байт. охранники инициализируются при входе в функцию, а затем проверяются когда функция выходит. Если контрольная проверка не пройдена, появляется сообщение об ошибке распечатывается и программа выходит "

Опции GCC, управляющие оптимизацией

Расширение GCC для защиты приложений от атак с разбиванием стека

Разбить стек ради удовольствия

Надеюсь, это даст некоторую подсказку ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...