- -fstack-protector 只为局部变量中包含长度超过8-byte(含)的char数组的函数插入保护代码
- -fstack-protector-strong 满足以下三个条件都会插入保护代码:
- 局部变量的地址作为赋值语句的右值或函数参数
- 局部变量包含数组类型的局部变量,不管数组的长度
- 带register声明的局部变量
Linux系统中存在着三种类型的栈:
- 应用程序栈:工作在Ring3,由应用程序来维护;
- 内核进程上下文栈:工作在Ring0,由内核在创建线程的时候创建;
- 内核中断上下文栈:工作在Ring0,在内核初始化的时候给每个CPU核心创建一个。