首页 存档 技术 查看内容

Android 中的 FORTIFY

2018-3-30 13:00 |来自: 互联网 577 0

摘要: FORTIFY 是 Android 自 2012 年中以来一直配备的一项重要的安全功能。去年初,在将默认的 C/C 编译器从GCC迁移为Clang后,我们投入大量时间和精力,确保 FORTIFY 在 Clang 中的质量与之前相当。为做到这一点,我们重 ...


FORTIFY 是 Android 自 2012 年中以来一直配备的一项重要的安全功能。去年初,在将默认的 C/C 编译器从GCC迁移为Clang后,我们投入大量时间和精力,确保 FORTIFY 在 Clang 中的质量与之前相当。为做到这一点,我们重新设计了某些关键的 FORTIFY 功能的工作方式,具体将在下文介绍。

在我们介绍全新 FORTIFY 的一些详情之前,我们来简单回顾一下 FORTIFY 的功能及其用法。



什么是 FORTIFY?

FORTIFY 是 C 标准库的扩展集,用于拦截对 memset、sprintf 和 open 和其他标准函数的错误使用。它有三大功能:

  • 如果在编译时 FORTIFY 检测到错误调用标准库函数,则在错误得到修复前将不允许编译您的代码。

  • 如果 FORTIFY 未获取足够的信息,或者如果确定代码是安全的,FORTIFY 将不会对任何信息进行编译。这意味着,当 FORTIFY 在找不到错误的上下文中使用时,它的运行时开销为 0。

  • 否则,FORTIFY 会进一步进行检查,动态确定可疑代码是否存在错误。如果检测到错误,FORTIFY 将输出部分调试信息并中止程序运行。


思考下例,它是 FORTIFY 在真实代码中捕获的一个错误:

struct Foo {
    int val;
    struct Foo *next;
};
void initFoo(struct Foo *f) {
    memset(
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部