是否有类似sprintf()
Linux 内核的功能(如printf()
-> printk()
)?
问问题
27992 次
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 回答