首页 > 解决方案 > 在源代码级别使用 GCC __builtin_object_size 有什么动机吗?

问题描述

我知道这并不新鲜,但最近我遇到了 GCC __builtin_object_size() 函数的话题。对于我从文档中读到的内容,它指出预期用途如下:

预期用途可以是例如

#undef memcpy
#define bos0(dest) __builtin_object_size (dest, 0)
#define memcpy(dest, src, n) \
  __builtin___memcpy_chk (dest, src, n, bos0 (dest))

char *volatile p;
char buf[10];
/* It is unknown what object p points to, so this is optimized
   into plain memcpy - no checking is possible.  */
memcpy (p, "abcde", n);

... // more codes

直接在源代码级别使用它而不是在编译时启用 D_FORTIFY_SOURCE 标志有什么好处吗?现实生活中是否有从使用 __builtin_object_size() 中受益的例子?

标签: cgcc

解决方案


这个例子展示了如何_FORTIFY_SOURCE使用memcpy!

但是除了标准库函数之外,肯定还有其他函数可以从对象指针范围检查中受益。


推荐阅读