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