我正在编译一个商业多平台的C++游戏引擎,使用GCC 4.2在Mac OS X 10.6上进行编译时启用了-Wstack-protector
警告。该标志会警告一些未受保护的函数,即使使用了-fstack-protector
也无法保护这些函数。
在构建项目时,GCC会发出一些警告:
not protecting function:no buffer at least 8 bytes long
not protecting local variables:variable length buffer
对于第一个警告,我发现可以调整函数中使用的缓冲区的最小大小,以保护该函数免受堆栈破坏:--param ssp-buffer-size=X
,其中X默认为8,可以降至1。
对于第二个警告,除非停止使用-Wstack-protector
,否则无法避免出现。
- 什么情况下应该使用
-fstack-protector
?(例如,在开发期间始终使用还是只在跟踪错误时使用?) - 什么情况下应该使用
-fstack-protector-all
? -Wstack-protector
告诉我什么?它是在建议我减小缓冲区最小大小吗?- 如果是这样,将大小设置为1是否有任何缺陷?
- 似乎
-Wstack-protector
不是您希望始终启用的标志,如果要获得无警告的构建,是这样吗?