GCC中的安全编译参数

Linux中有各种各样的安全防护,ASLR是由内核直接提供的,通过系统配置文件控制。NX,Canary,PIE,RELRO在编译时指定,根据各项参数调整。在无参数指定时,使用默认的参数。不同系统环境中默认选项并不相同。

有各种工具可以查看编译指定的安全选项。比如peda中的checksec命令,或者pwntools中的pwn checksec命令。

可以在gcc的手册中查看各类保护的描述,man gcc即可。

各种安全选择的编译参数如下:

综合上面的参数,可以进行各种配置

gcc hello.c -o hello-L -fno-stack-protector -z execstack -no-pie -z norelro
gcc hello.c -o hello-S -fstack-protector-all -z noexecstack -pie -z now

PS:

默认编译参数可以由环境变量CFLAG调节,如同makefile文件中的一样。比如:export CFLAGS='-std=c99'

Table of Contents