asmlinkage long my_sys_openat(int dfd, const char __user *filename, int flags, umode_t mode){
if(current->comm != NULL && strstr(name, current->comm))
{
printk(KERN_INFO "fuck kernel: sys_openat(%d, %s, %d, %d)\n", dfd, filename, flags, mode); //单独这条printk崩溃
printk(KERN_INFO "fuck kernel: sys_openat(%d, %d, %d)\n", dfd, flags, mode); //单独这条printk可以正常输出
... //随便写点代码
printk(KERN_INFO "fuck kernel: sys_openat(%d, %s, %d, %d)\n", dfd, filename, flags, mode); //正常
}
return sys_openat(dfd, filename, flags, mode);
}
printk(KERN_INFO "fuck kernel: sys_openat(%d, %s, %d, %d)\n", dfd, filename, flags, mode);
这条语句,内核输出一部分就崩溃了呀。奇怪的是这条代码上面随便加点东西有可以正常输出了。
单独
printk(KERN_INFO "fuck kernel: sys_openat(%s)\n", filename);
这条语句也会直接崩溃,怀疑是filename取到非法值了。
但,后面我自己封装了一个获取字符串的函数,可以正常获取打印,并没有取到非法值,就是直接printk的时候不行,很是不解,求大佬们解答下,谢谢。