gcc 若干安全相关选项

本文介绍了GCC的两个安全相关选项:FORTIFY_SOURCE用于防御buffer over-flow,通过编译时检查防止缓冲区溢出;PIE和fpie则涉及位置无关可执行程序,增强程序安全性,防止如缓冲区溢出等攻击。通过实例展示了这些选项的使用和效果。
摘要由CSDN通过智能技术生成

1. FORTIFY_SOURCE(buffer over-flow 防御)

参考:http://fedoraproject.org/wiki/Security/Features#Compile_Time_Buffer_Checks_.28FORTIFY_SOURCE.29

http://gcc.gnu.org/ml/gcc-patches/2004-09/msg02055.html

此选项用于 gcc 在编译阶段检查是否存在缓冲区溢出问题。相关的原理及说明见上面的两个网址。此处仅举几个简单的例子说明其作用。

示例程序如下:

  1 #include <stdio.h>
  2 #include <string.h>
  3 
  4 int main()
  5 {
  6         char str[3];
  7 
  8         strcpy(str, "abcde");   //这里有问题
  9 
 10         return 0;
 11 }

首先看看不带 FORTIFY_SOURCE 选项的结果:

[tom@localhost code]$ gcc -O2 -o test test.c
[tom@localhost code]$ ll

可见,不带 FORTIFY_SOURCE 选项的情况下,编译器无法检测到这类问题;

在看看带 FORTIFY_SOURCE 选项的编译结果(注意该选项只能和 -O 选项一起使用,且优化级别大于 0):

[tom@localhost code]$ gcc -O2 -D_FORTIFY_SOURCE=2(1 或者 2) -o test test.c
In file included from /usr/include/string.h:642:0,
                 from test.c:2:
In function 'strcpy',
    inlined from 'main' at test.c:8:8:
/usr/include/bits/string3.h:105:3: warning: call to __builtin___memcpy_chk will always overflow destination buffer [enabled by default]
[tom@localhost code]$ 

可以看到,已经报出来在源码的第 8 行存在溢出问题。

需要注意的是这个选项只能辅助检测出一部分缓冲区溢出的问题,而不是所有的。

2. gcc的pie和fpie选项

(转自:http://blog.sina.com.cn/s/blog_ae4e800401014pcg.html)

Position-Independent-Exe

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值