我已经用C语言编写了一个应用程序,试图在编译时了解-fno-stack-protector
命令的目的。对于我的特定应用程序,无论是否使用此命令,在防止缓冲区溢出方面都没有区别。
我已经在线阅读了-fstack-protector
和-fno-stack-protector
命令分别启用和禁用堆栈粉碎保护程序,但是如果我自己编译应用程序,那么如何预先启用该保护程序?命令的用法是否取决于应用程序在哪个系统上运行?
最佳答案
在标准/常规GCC中,堆栈保护器默认情况下处于关闭状态。但是,某些Linux发行版已修补GCC,以默认将其打开。在我看来,这非常有害,因为除非Makefile专门禁用堆栈保护程序,否则它会破坏编译未与标准用户空间库链接的任何内容的能力。它甚至会破坏Linux内核的构建,除了带有此hack的发行版向GCC添加了其他黑客以检测正在构建的内核并禁用它。
关于c - -fno-stack-protector的用途是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10712972/