gcc -fstack-protector 不会抛出错误

gcc -fstack-protector does not throw error

有人知道为什么以下代码行会抛出 *** stack smashing detected *** 错误

#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';
}

谢谢!!

覆盖 x[17] 不会覆盖 gcc 放在 return 地址之前的 canary 值。