#c #gcc #stack #buffer-overflow
Вопрос:
Я читаю о канарейках в вики по защите от переполнения буфера и не понимаю, как определить, какие канарейки используются в программе, то есть терминатор, случайный и случайный XOR.
Я на 32-разрядной версии Debian с программой на C с версией GCC 10.3.0
.
После компиляции -fstack-protector
и просмотра того, что я считаю значением, хранящимся в стеке для канарейки, я вижу, что значение меняется каждый раз при запуске программы.
Означает ли это, что используются случайные канарейки?
Есть ли способ точно узнать, какой тип карни используется?
Это указано где-то в документах GCC или типы можно определить, посмотрев на программу в GDB?
Комментарии:
1. Две полезные статьи: sans.org/blog/stack-canaries-gingerly-sidestepping-the-cage , и mcuoneclipse.com/2019/09/28/. … Чтобы ответить на ваш вопрос: похоже, что ваша конкретная версия GCC использует случайную канарейку (или, возможно, случайную канарейку XOR). Другие типы могут включать нулевую канарейку, канарейку-терминатор и пользовательскую канарейку. Вы всегда можете сгенерировать выходные данные сборки («gcc-S myfile.c» с помощью «-fstack-protector» или «-fstack-protector-все») или посмотреть исходный код GCC.