如何" -fstack-protector"和" FORTIFY"选项有什么不同?

时间:2014-11-25 01:16:25

标签: linux gcc

这些天我正在搜索安全编码指南,并且有一个选项可以阻止

缓冲区溢出。

一,

$gcc -fstack-protector -S test.c
$cat test.s

二,

$gcc -O -D_FORTIFY_SOURCE=1 test.c

我可以从FORTIFY选项看到缓冲区溢出的警告,但实际上我对-fstack-protector选项并不太了解。

它们完全不同并且没有任何阻止缓冲区溢出的效果吗?

1 个答案:

答案 0 :(得分:0)

-fstack-protector基本上创建了所谓的金丝雀 - 放置在堆栈中的虚拟变量。退出函数时,将检查变量。如果被覆盖,程序将退出,并显示错误消息。

_FORTIFY_SOURCE编译时定义是在启用优化时检查标准违规的代码的定义。因此,您在编译时而不是在运行时遇到错误,就像使用-fstack-protector一样。

当优化设置为1级或更高级别时,

_FORTIFY_SOURCE = 1将启用此功能。