金丝雀

*** 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”!

 

或者在函数内增加长度/边界检查,防止越界!

posted @ 2019-08-21 21:28  MoonXu  阅读(699)  评论(0编辑  收藏  举报