gpt4 book ai didi

c - 从用户空间到内核空间的指针为空

转载 作者:太空狗 更新时间:2023-10-29 11:28:56 26 4
gpt4 key购买 nike

如果之前有人问过这个问题,我很抱歉,因为它看起来有点基础,但我无法在本网站的任何地方找到它。我正在使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com