Linux内核中是否有像sprintf()
这样的函数(例如printf()
- > printk()
)?
答案 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 overflows,Apple等
答案 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()
,但方向相反。