Stack Canary 的应用
Canary 一词意为金丝雀,相传以前矿工们会携之下矿井,一旦金丝雀死亡则说明矿井中存在瓦斯泄露的情况。而 Stack Canary 的作用也类似:每开辟一个新栈帧时,先在毗邻上一栈帧处设置一个特定值,然后在每次函数返回时检查一下该值是否被改变;如被改变,则说明栈被越界写所破坏。
用户态程序 上面提到的关于 Canary 值的设置、校验,以及出错后的处理,这些动作的代码逻辑都是由编译器负责生成并嵌入到可执行文件中的。用户需要做,或者说可以做的事情只有:
需要添加 -fstack-protector/-fstack-protector-strong 编译参数。 可以在代码中定义 __stack_chk_guard 全局变量, …