Stack Canary

Stack Smashing Protection / Stack Cookies

SSP 在 Stack Guard 的基础上进行了改进和提高。它是由 IBM 的工程师 Hiroaki Rtoh 开发并维护的。与 Stack Guard 相比,SSP 保护函数返回地址的同时还保护了栈中的 EBP 等信息。此外,SSP 还有意将局部变量中的数组放在函数栈的高地址,而将其他变量放在低地址。这样就使得通过溢出一个数组来修改其他变量(比如一个函数指针)变得更为困难。

  • fstack-protector: 启用堆栈保护,不过只为局部变量中含有 char 数组的函数插入保护代码。
  • fstack-protector-all: 启用堆栈保护,为所有函数插入保护代码。
  • fno-stack-protector: 禁用堆栈保护。

x86 stack canary gs:0x14
x64 stack canary fs:

References

https://www.ibm.com/developerworks/cn/linux/l-cn-gccstack/