如果之前有人问过这个问题,我很抱歉,因为它看起来有点基础,但我无法在本网站的任何地方找到它。 我正在使用 linux (debian) 进行 OS 编程,我正在尝试提供从我的用户空间到我的内核空间函数的指针。
即在我做的用户空间
...
long res;
int x = -1;
int *p1 = &x; // also tried doing a malloc, didn't change anything
res = kernel_function(p1);
...
在内核空间文件 kernel_function.c 中我做
asmlinkage long kernel_function( int __user *p){
printk("%p \n", (void*) p);
return 0;
}
我还做了通常的其他步骤,比如将函数的原型(prototype)添加到 syscalls.h,将文件名添加到 syscall_32.tbl 等。但是当我运行我的用户空间函数时,唯一打印到内核日志的是(NULL)。所以函数确实被调用了,但是指针丢失了,知道为什么会这样吗?
最佳答案
您没有查看任何其他 Linux 内核函数吗?
你不能只传递一个指针。那将是非常不安全的。
您需要使用 copy_from_user 将数据放入内核空间。
SO 上似乎已经有一些答案,例如:how is the correct way to use copy_from_user?
关于c - 从用户空间到内核空间的指针为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35936982/