gcc -fstack-protector不会抛出错误

时间:2018-10-13 18:29:03

标签: c gcc stack-overflow stack-smash

有人知道为什么以下几行代码会抛出***堆栈粉碎检测到的***错误

#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 个答案:

答案 0 :(得分:3)

覆盖x[17]不会覆盖gcc在返回地址前放置的canary值。