![更改系统范围的 GCC 编译选项,例如 -DFORTIFY_SOURCE、PIE 和 stack_protector](https://linux22.com/image/123940/%E6%9B%B4%E6%94%B9%E7%B3%BB%E7%BB%9F%E8%8C%83%E5%9B%B4%E7%9A%84%20GCC%20%E7%BC%96%E8%AF%91%E9%80%89%E9%A1%B9%EF%BC%8C%E4%BE%8B%E5%A6%82%20-DFORTIFY_SOURCE%E3%80%81PIE%20%E5%92%8C%20stack_protector.png)
这是我遇到的第一个 StackExchange 问题,如果它问错了地方(UNIX 和 Linux 与软件工程之类的地方?),请指出我的正确方向!
很久以前,我使用 Hardened Linux From Scratch 指南构建了一个系统(http://linuxfromscratch.org/hlfs/view/development/)。我正在构建另一个系统,因为我想运行一些应用程序,但我的旧系统不支持,并且我认为构建这个系统会更容易,也更有趣地面朝上。问题是 HLFS 指南和补丁已被搁置,该项目已经终止。
我喜欢这个项目通过添加特定标志来强化工具链,例如默认情况下 -D_FORTIFY_SOURCE=2、-fPIE -pie、-fstack-protector-all 和 --param=ssp-buffer-size=4 (http://linuxfromscratch.org/hlfs/view/development/chapter05/gcc-pass2.html)。
问题是,如果这些功能在我想要使用的 GCC 近版本(7.2.0 左右)中仍然相关,或者如何启用它们,我找不到任何指导,甚至找不到一致的答案。搜索显示 Fedora 项目 (https://fedoraproject.org/wiki/Security_Features?rd=Security/Features#Stack_Smash_Protection.2C_Buffer_Overflow_Detection.2C_and_Variable_Reordering)和Ubuntu(https://wiki.ubuntu.com/GccSsp)仍然有这些选项,或者在形式上与它们非常接近的选项“默认启用”,但我似乎找不到有关如何对正在构建的系统执行此操作的文档。
我唯一能想到的就是使用类似“alias gcc='gcc --options_go_here'”之类的东西,但如果我必须关闭某个选项,或者在类似的选项(如 -fpic)之间进行更改,这似乎会弄巧成拙-fPIC。
对于构建 gcc 有什么建议、指导或更好的搜索条件吗?