这些天我在搜索安全编码指南,有一个选项可以防止
缓冲区溢出。
一,
$gcc -fstack-protector -S test.c
$cat test.s二,
$gcc -O -D_FORTIFY_SOURCE=1 test.c我可以从FORTIFY选项中看到缓冲区溢出的警告,但实际上我对-fstack-protector选项并不是很了解。
它们是完全不同的,并且没有任何防止缓冲区溢出的效果吗?
发布于 2014-11-26 05:21:17
-fstack保护器基本上创建了被放在堆栈中的所谓的金丝雀虚拟变量。在函数退出时,检查变量。如果被覆盖,程序将退出并显示一条错误消息。
_FORTIFY_SOURCE编译时定义是在打开优化时检查代码是否违反标准的定义。所以你会在编译时得到一个错误,而不是像-fstack保护器那样在运行时得到一个错误。
当优化设置为级别1或更高时,_FORTIFY_SOURCE=1将启用此功能。
https://stackoverflow.com/questions/27117437
复制相似问题