我-Wstack-protector
在编译我正在处理的项目(商业多平台 C++ 游戏引擎,在 Mac OS X 10.6 和 GCC 4.2 上编译)时启用了警告。此标志警告即使-fstack-protector
启用,也无法防止堆栈粉碎的功能。GCC 在构建项目时会发出一些警告:
不保护函数:没有至少 8 字节长的缓冲区
不保护局部变量:可变长度缓冲区
对于第一个警告,我发现可以调整缓冲区在函数中使用时必须具有的最小大小,以便保护该函数免受堆栈粉碎:--param ssp-buffer-size=X
可以使用,其中 X 默认为 8,可以为低至 1。
对于第二个警告,除非我停止使用-Wstack-protector
.
- 什么时候应该
-fstack-protector
使用?(例如,在开发期间的所有时间,或者只是在跟踪错误时?) - 什么时候应该
-fstack-protector-all
使用? -Wstack-protector
告诉我什么?是否建议我减小缓冲区最小大小?- 如果是这样,将大小设置为 1 有什么缺点吗?
- 如果您想要一个无警告的构建,这似乎
-Wstack-protector
不是您想要始终启用的那种标志。这是正确的吗?