GCC强化函数文档
我试图找到在GCC for libc中实现强化函数所需的信息 据我所知uuu内置u*.\ u chk变体用于编译时检查,但如果GCC无法确定缓冲区大小,他将用u*.\ u chk版本(如果存在)替换调用 上述断言正确吗?如果是这样的话,我在哪里可以找到关于在libc中GCC需要什么的文档,以便在FORTIFY_SOURCE=1 | 2时将函数绑定到它的运行时uu*_chk版本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的
\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
函数,但只使用这些知识执行优化(死代码删除、折叠等),而不是验证