#include <linux/kernel.h>
#include <linux/uaccess.h>
unsigned long long cnt = 0;
asmlinkage long sys_customcall(unsigned long long __user *output)
{
unsigned long err;
err = copy_to_user(output, &cnt, sizeof(unsigned long long));
return err;
} 我正在实现一个简单的系统调用。我想将一个值从内核(cnt)复制到用户指针(output)。但是,当我运行代码err =8(即sizeof(unsigned long long) )时,用户端值没有改变。我做错了什么?我使用的是linux-kernel版本5.4.59。
用户级代码如下。
#include <stdio.h>
#include <linux/kernel.h>
#include <sys/syscall.h>
#include <unistd.h>
int main()
{
unsigned long long cnt=0;
long int err = syscall(436, &cnt);
printf("System call returned %lu\n", err);
printf("System call returned %llu\n", cnt);
return 0;
}发布于 2020-09-17 21:15:13
当我将链接更改为SYSCALL_DEFINEx宏时,问题得到了解决。这不确定,但我相信这与x86_64系统调用包装器有关。This link was helpful。谢谢你们所有人。
https://stackoverflow.com/questions/63919453
复制相似问题