金丝雀
*** stack smashing detected ***: <unknown> terminated
Aborted (core dumped)
tack-Smashing Protector”机制(在数组后插入一些金丝雀(Canary, 因为大家在矿井作业时,会用金丝雀来预警,如果金丝雀死了,那证明有毒气),在函数执行完成返回之前会检查一下Canary,如果canary被改掉,则不再继续执行,中止程序,避免执行攻击者的代码。)
因此,出现“栈溢出”这个错,实际上是GCC编译器的保护作用!这也是为什么在打印结果之后才报错!
另外,尝试了编译时怎么不开启"Stack-Smashing Protector"。(“Stack-Smashing Protector”默认是打开的!)
如:$ gcc test.c -fno-stack-protector。运行时输出结果后不会报“stack smashing detected”!
或者在函数内增加长度/边界检查,防止越界!