15.5. 使用 GCC 强化代码
当编译器将源代码转换为对象代码时,它可以添加各种检查来防止经常被利用的情况,从而提高安全性。选择正确的编译器选项集可帮助生成更安全的程序和库,而无需更改源代码。
发行版本选项
对于目标为 Red Hat Enterprise Linux 的开发人员,推荐使用以下选项列表:
$ gcc ... -O2 -g -Wall -Wl,-z,now,-z,relro -fstack-protector-strong -D_FORTIFY_SOURCE=2 ...
-
对于程序,添加
-fPIE
和-pie
位置独立的可执行文件选项。 -
对于动态链接的库,强制
-fPIC
(Position Independent Code)选项间接提高了安全性。
开发选项
建议您在开发过程中检测安全漏洞。使用这些选项以及发行版本的选项:
$ gcc ... -Walloc-zero -Walloca-larger-than -Wextra -Wformat-security -Wvla-larger-than ...
其它资源
- 防御编码指南
- Red Hat Developer 博客文章 - 使用 GCC 的内存错误检测