-fno-stack-protector有什么用?

tou*_*000 25 c stack-overflow buffer callstack protection

我用C编写了一个应用程序,我试图了解-fno-stack-protector编译时命令的用途是什么.对于我的特定应用程序,如果我在防止缓冲区溢出方面使用此命令,则没有任何区别.

我在网上看到,-fstack-protector-fno-stack-protector命令分别启用和禁用堆栈粉碎保护器,但如果我自己编译应用程序,如何预先启用保护器?命令的使用是否可能取决于运行应用程序的系统?

R..*_*R.. 16

在标准/库存GCC中,堆栈保护器默认处于关闭状态.但是,一些Linux发行版修补了GCC以默认打开它.在我看来,这是非常有害的,因为它打破了编译任何没有链接到标准用户空间库的能力,除非Makefile专门禁用堆栈保护程序.它甚至会破坏Linux内核的构建,除了带有这个hack的发行版为GCC增加了额外的攻击,以检测内核是否正在构建并禁用它.

  • 根据定义,默认情况下,在具有堆栈保护的系统上编译的任何内容都不会与使用堆栈保护构建的库链接,因为它们反过来会在打开堆栈保护的系统上编译? (2认同)

Jon*_*ler 12

如果使用编译-fstack-protector,则会在堆栈上分配更多空间,并且在代码设置检查时进入和返回函数会有更多开销,然后实际检查是否在覆盖堆栈时覆盖了堆栈功能.

它会对您的应用程序产生影响.如果启用,它将很快阻止堆栈溢出攻击.只有当你的代码中没有函数调用时才会使你的程序不受影响(因为你正常编写main(),这是一个由启动代码调用的函数,它会对你的程序产生影响).但是,堆栈溢出攻击并不是唯一可以使用的攻击,因此它不是灵丹妙药.但它是有限的成本保护.

保护不依赖于系统本身; 它取决于您使用的编译器的版本,但这就是全部.