gcc -fstack-protector не выдает ошибку

Кто-то знает, почему следующие строки кода выдают *** обнаружение разрушения стека *** ошибка

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char **argv)
{
  char x[16];
  strcpy(x,"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
}

но следующий код не бросает его?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char **argv)
{
    char x[16];
    x[17] = 'a';
}

Спасибо!!

1 ответ

Решение

Перезапись x[17] не переопределяет канареечное значение, помещенное перед адресом возврата gcc.

Другие вопросы по тегам