GCC 的堆栈保护器选项和更高的 CPU 使用率



有人知道GCC的-fstack-protector是否会导致程序使用大量的CPU周期吗?这里的描述提到了

-fstack-protector发出额外的代码来检查缓冲区溢出,例如堆栈破坏攻击。这是通过添加一个保护变量来实现的带有易受攻击对象的函数。这包括调用Alloca,以及缓冲区大于8字节的函数。守卫们在输入函数时初始化,然后在函数退出。如果防护检查失败,则打印一条错误消息程序退出。

此外,这是否比在函数开始时编写检查缓冲区指针和大小的代码更好?

应该不会导致CPU使用量的显著增加。正如描述所述,堆栈保护包括在函数入口时将一个特定的值放在堆栈上,并在函数退出时验证它没有改变。通常,函数会做很多操作,而不仅仅是写入和读取一个值,所以这不会造成很大的开销。

堆栈保护应该与正确编写代码一起使用。它不能捕获每个错误,并且可以被攻击者绕过,但是由于它自动应用于每个函数,它可以帮助更快地检测意外或故意的溢出。

最新更新