这些天我正在搜索安全编码指南,并且有一个选项可以阻止
缓冲区溢出。
一,
$gcc -fstack-protector -S test.c
$cat test.s
二,
$gcc -O -D_FORTIFY_SOURCE=1 test.c
我可以从FORTIFY选项看到缓冲区溢出的警告,但实际上我对-fstack-protector选项并不太了解。
它们完全不同并且没有任何阻止缓冲区溢出的效果吗?
答案 0 :(得分:0)
-fstack-protector基本上创建了所谓的金丝雀 - 放置在堆栈中的虚拟变量。退出函数时,将检查变量。如果被覆盖,程序将退出,并显示错误消息。
_FORTIFY_SOURCE编译时定义是在启用优化时检查标准违规的代码的定义。因此,您在编译时而不是在运行时遇到错误,就像使用-fstack-protector一样。
当优化设置为1级或更高级别时,_FORTIFY_SOURCE = 1将启用此功能。