出题时常用到的编译命令

就是开保护关保护什么的编译选项

Linux alsr

1
2
3
4
5
# sysctl -n kernel.randomize_va_space
# cat /proc/sys/kernel/randomize_va_space

# sysctl -w kernel.randomize_va_space=0
# echo 0 > /proc/sys/kernel/randomize_va_space

PIE

1
2
3
4
5
6
$ gcc -o test test.c                // 默认不开启PIE
$ gcc -fpie -pie -o test test.c // 开启PIE 强度为1
$ gcc -fPIE -pie -o test test.c // 开启PIE 最高强度2
$ gcc -fpic -o test test.c // 开启PIC 强度为1 不会开启PIE
$ gcc -fPIC -o test test.c // 开启PIC 最高强度2 不会开启PIE
$ gcc -no-pie -o test test.c // 关闭pie

NX

1
2
3
$ gcc -o test test.c                    // 默认开启 NX 保护
$ gcc -z execstack -o test test.c // 禁用 NX 保护
$ gcc -z noexecstack -o test test.c // 开启 NX 保护

canary

1
2
3
4
$ gcc -o test test.c                        // 默认不开启 Canary 保护
$ gcc -fno-stack-protector -o test test.c // 禁用栈保护
$ gcc -fstack-protector -o test test.c // 启用堆栈保护,只为局部变量中含有 char 数组的函数插入保护代码
$ gcc -fstack-protector-all -o test test.c // 启用堆栈保护,为所有函数插入保护代码

FORTIFY

1
2
3
$ gcc -o test test.c                          // 默认不会开启检查
$ gcc -D_FORTIFY_SOURCE=1 -o test test.c // 较弱的检查
$ gcc -D_FORTIFY_SOURCE=2 -o test test.c // 较强的检查

RELRO

1
2
3
4
gcc -o test test.c                     // 默认是 Partial RELRO
gcc -z norelro -o test test.c // 关闭
gcc -z lazy -o test test.c // 部分开启 即Partial RELRO
gcc -z now -o test test.c // 全部开启

去符号名

1
// gcc -o box box.c && strip -s box
-------------本文结束感谢您的阅读-------------
+ +