在linux下进行缓冲区溢出实验 出现illegal instruction

int main(int argc, int *argv[])
{
char buf[10];
if(argc>1)
strcpy(buf,argv[1]);
return 0;
}

编译时带有-fno-stack-protector,在第一参数为21字符时正常,22字符时出现illegal instruction,23字符时出点段错误。
请问22字符时的illegal instruction是怎么回事?

是char *argv[]打错了

看你越界的时候有没有覆盖到一些有用的数据,影响了调用栈,比如函数返回地址