Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
GCC强化函数文档_Gcc_Fortify Source - Fatal编程技术网

GCC强化函数文档

GCC强化函数文档,gcc,fortify-source,Gcc,Fortify Source,我试图找到在GCC for libc中实现强化函数所需的信息 据我所知uuu内置u*.\ u chk变体用于编译时检查,但如果GCC无法确定缓冲区大小,他将用u*.\ u chk版本(如果存在)替换调用 上述断言正确吗?如果是这样的话,我在哪里可以找到关于在libc中GCC需要什么的文档,以便在FORTIFY_SOURCE=1 | 2时将函数绑定到它的运行时uu*_chk版本 多亏了,强化主要通过GCC的\uuuBuiltin\uConstant\uP和\uUuBuiltin\uObject\u

我试图找到在GCC for libc中实现强化函数所需的信息

据我所知uuu内置u*.\ u chk变体用于编译时检查,但如果GCC无法确定缓冲区大小,他将用u*.\ u chk版本(如果存在)替换调用

上述断言正确吗?如果是这样的话,我在哪里可以找到关于在libc中GCC需要什么的文档,以便在FORTIFY_SOURCE=1 | 2时将函数绑定到它的运行时uu*_chk版本


多亏了,

强化主要通过GCC的
\uuuBuiltin\uConstant\uP
\uUuBuiltin\uObject\uSize
内部函数在Glibc中实现。例如,以下是
/usr/include/string.h
memset
的定义:

__fortify_function void *
__NTH (memset (void *__dest, int __ch, size_t __len))
{
  if (__builtin_constant_p (__len) && __len == 0
      && (!__builtin_constant_p (__ch) || __ch != 0))
    {
      __warn_memset_zero_len ();
      return __dest;
    }
  return __builtin___memset_chk (__dest, __ch, __len, __bos0 (__dest));
}
\uuuuuuuuuu内置的memset\u chk
由GCC简单地扩展为调用
memset\u chk
(也在libc.so中定义)

GCC了解
*\u chk
函数,但只使用这些知识执行优化(死代码删除、折叠等),而不是验证