21

是否有类似sprintf()Linux 内核的功能(如printf()-> printk())?

4

5 回答 5

22

是的。 https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/lib/vsprintf.c#n1828

int snprintf(char *buf, size_t size, const char *fmt, ...)
{
    va_list args;
    int i;

    va_start(args, fmt);
    i = vsnprintf(buf, size, fmt, args);
    va_end(args);

    return i;
}
EXPORT_SYMBOL(snprintf);

sprintf()本身就容易发生缓冲区溢出。CERT 缓冲区溢出Apple

于 2012-09-04T13:23:02.287 回答
1

是的,只需包含 linux/kernel.h

于 2013-09-14T08:48:11.330 回答
0

是的,例如这里有检查

你可以使用 grep 来查看它是否在内核的源代码中

于 2012-09-04T13:19:18.433 回答
0

在实时 2.6 内核上运行 crash 确认 sprintf() 已定义,以及它的定义位置。

崩溃> sym sprintf

ffffffff81267ba0 (T) sprintf ../debug/kernel-2.6.39/linux-2.6.39-400.210.2.el6uek/lib/vsprintf.c: 1442

于 2013-12-12T18:47:14.903 回答
0

sprintf()由于缓冲区溢出而不安全。如果您需要将数据从用户空间传递到内核空间,请改用copy_from_user(); 它的作用类似copy_to_user()但方向相反。

于 2020-04-09T09:57:08.753 回答