gpt4 book ai didi

security - "__fortify_fail"是做什么的?

转载 作者:行者123 更新时间:2023-12-01 11:46:42 25 4
gpt4 key购买 nike

用户提交了错误报告,我的应用程序在“__fortify_fail()”中出现了段错误。

我知道这与使用 Debian 的“强化”标志 -D_FORTIFY_SOURCE=2 -fstack-protector 构建我的应用程序有关。

不幸的是 backtrace的用户还没有告诉我太多信息,而且用户的响应速度不是很快(现在)。

为了更好地理解发生了什么,我想知道 __fortify_fail 实际上做了什么。

最佳答案

这个函数通常只是一个错误报告器。 glibc 的示例代码是:

extern char **__libc_argv attribute_hidden;

void
__attribute__ ((noreturn))
__fortify_fail (msg)
const char *msg;
{
/* The loop is added only to keep gcc happy. */
while (1)
__libc_message (2, "*** %s ***: %s terminated\n",
msg, __libc_argv[0] ?: "<unknown>");
}
libc_hidden_def (__fortify_fail)

它可能会在需要加强资源的地方被调用。 “设防”本身只是几个运行时检查。 io/openat.c 中的 openat 函数的示例用法是:

int
__openat_2 (fd, file, oflag)
int fd;
const char *file;
int oflag;
{
if (oflag & O_CREAT)
__fortify_fail ("invalid openat call: O_CREAT without mode");

return __openat (fd, file, oflag);
}

在没有设防的情况下,O_CREAT 没有模式也是可以接受的(这种情况仍然非常可疑,它合法的)。

__fortify_fail 视为 printf+abort。

关于你的问题打开心灵感应,我可能会建议用户在用户代码中使用 libc 时遇到一些问题。 /lib/x86_64-linux-gnu/libc.so.6(+0xebdf0)[0x7f75d3576df0] 是 libc 内部的一个地方,一些运行时检查失败,所以 pd[0x49b5c0] 是错误调用 libc 的地方。

关于security - "__fortify_fail"是做什么的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14711899/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com