这些天来,我正在寻找安全的编码指南,并且有一个选项可以防止

缓冲区溢出。

一,

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


二,

$gcc -O -D_FORTIFY_SOURCE=1 test.c


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

它们是否完全不同,并且对防止缓冲区溢出没有任何作用?

最佳答案

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

_FORTIFY_SOURCE编译时间定义是在打开优化功能时检查代码是否违反标准的定义。因此,您会在编译时而不是在运行时收到错误,就像使用-fstack-protector一样。

当优化设置为1或更高级别时,_FORTIFY_SOURCE = 1启用此功能。

关于linux - “-fstack-protector”和“FORTIFY”选项有何不同?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27117437/

10-11 20:58