如何启用buildroot gcc安全性构建选项,如_FORTIFY_SOURCE和堆栈保护器?

时间:2017-11-10 08:02:19

标签: gcc toolchain buildroot

我遇到了要求,可执行二进制文件必须通过https://github.com/slimm609/checksec.sh

进行检查

所以我为我的工具链gcc启用了以下构建配置:

_D_FORTIFY_SOURCE=2  -Wl,-z,relro,-z,now -fstack-protector-all 

但是在编译期间没有输出任何警告消息,而当我使用主机gcc build时它显示正确警告消息。

下面的

是我的构建日志

jason@linux-server:~/tmp/test$ /opt/buildroot-gcc463/usr/bin/mipsel-buildroot-linux-uclibc-gcc -Wall -O2 -D_FORTIFY_SOURCE=2  -Wl,-z,relro,-z,now -fstack-protector-all -fpie -pie test.c -o testjason 

没有任何警告输出。

  

在主机x86 gcc中:包含来自的文件   /usr/include/string.h:640:0,                    来自test.c:2:在函数'memcpy'中,       从test.c:28:8中的'main'内联:/usr/include/x86_64-linux-gnu/bits/string3.h:51:3:警告:致电   __builtin___memcpy_chk将始终溢出目标缓冲区[默认启用] return __builtin___memcpy_chk(__dest,__ rc,   __len,__bos0(__dest)); ^在函数'memset'中,       在test.c:35:8内联'main':/usr/include/x86_64-linux-gnu/bits/string3.h:84:3:警告:致电   __builtin___memset_chk将始终溢出目标缓冲区[默认启用] return __builtin___memset_chk(__dest,__ ch,   __len,__bos0(__dest));

对于构建工具链,我只在package / gcc / gcc.mk文件中启用了libssp:

1 个答案:

答案 0 :(得分:1)

您的buildroot编译器路径表明它是针对uclibc的GCC 4.6。此编译器版本没有您在主机上看到的警告。

此外,uclibc在任何实际意义上都不支持_FORTIFY_SOURCE,所以如果你必须使用具有该功能的工具链,那么uclibc是错误的选择。