在Linux内核中是否有类似sprintf的C函数?

时间:2012-09-04 13:15:25

标签: c linux-kernel printf

Linux内核中是否有像sprintf()这样的函数(例如printf() - > printk())?

5 个答案:

答案 0 :(得分:19)

是肯定的。 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 buffer overflowsApple

答案 1 :(得分:1)

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

答案 2 :(得分:0)

是的,例如结帐here

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

答案 3 :(得分:0)

在2.6内核上运行崩溃确认sprintf()已定义,并且已定义。

碰撞> sym sprintf

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

答案 4 :(得分:0)

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