为了加快程序启动速度,Linux ELF 动态链接器采用**延迟绑定(Lazy Binding)**策略,在首次调用函数时由 PLT 查找符号并回填 GOT。全保护 Full RELRO 会在启动时解析所有符号并将 GOT 设为只读,阻断 GOT Overwrite 攻击。
一、GCC 开启 Full RELRO 编译标志
bash
# 默认情况(Partial RELRO):GOT 表可写,易受劫持
gcc vulnerable.c -o vuln
# 开启安全防御(Full RELRO + Stack Canary + PIE)
gcc vulnerable.c -o secured \
-Wl,-z,relro,-z,now \
-fstack-protector-strong \
-fPIE -pie