我满足了一个要求,可执行二进制文件必须通过检查
https://github.com/slimm609/checksec.sh
,
因此,我为我的工具链gcc启用了以下构建配置:
_D_FORTIFY_SOURCE=2 -Wl,-z,relro,-z,now -fstack-protector-all
但在编译期间,它没有输出任何警告消息,而在我使用主机gcc构建时,它正确地显示了警告消息。
下面是我的构建日志
:
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,
来自测试。c: 2:在函数memcpy中,
测试时从主管道内联。c: 28:8:/usr/include/x86_64-linux-gnu/bits/string3。h: 51:3:警告:呼叫
__builtin\uuuu memcpy\u chk将始终溢出目标缓冲区[默认情况下启用]返回\uu builtin\uuu memcpy\u chk(\uu dest,\uu src,
__len,_ubos0(_udest));^在函数memset中,
__builtin\uuuu memset\u chk将始终溢出目标缓冲区[默认情况下启用]返回\uu builtin\uuu memset\u chk(\uu dest,\uu ch,
__len,_ubos0(_udest));