gcc 若干安全相关选项

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

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值