gcc -fno-stack-protector
-z execstack
-no-pie -fno-PIE
-Wl,-z,norelro
-D_FORTIFY_SOURCE=0
-O0
-erroverflow.c -o overflow
1. fno-stack-protector
- 功能:禁用 Stack Canary(栈金丝雀) 保护。
2. z execstack
- 功能:告诉链接器将 栈(stack)标记为可执行。
3. no-pie -fno-PIE
4. Wl,-z,norelro
- 功能:禁用 RELRO(Relocation Read-Only) 保护。
5. D_FORTIFY_SOURCE=0
- 功能:禁用 _FORTIFY_SOURCE 安全检查。
• 后果:即使使用 -O1 以上优化,也不会对 strcpy、memcpy 等危险函数做编译时/运行时边界检查。
6. O0
| 保护机制 |
状态 |
攻击者能否利用? |
| Stack Canary |
❌ 关闭 |
✅ 可栈溢出覆盖返回地址 |
| NX (DEP) |
❌ 关闭 |
✅ 可在栈上执行 shellcode |
| ASLR(主程序) |
❌ 无效 |
✅ 地址固定,硬编码可用 |
| RELRO |
❌ 关闭 |
✅ 可改写 GOT 劫持函数 |
| FORTIFY |
❌ 关闭 |
✅ 危险函数无边界检查 |
echo 0 > /proc/sys/kernel/randomize_va_space