C 自定义linux内核系统调用包装函数
我正在为linux内核编写一个自定义系统调用 函数调用一切正常,现在我正在尝试 创建包装函数,以便在任何程序中正常使用该函数 不使用系统调用(调用) 到目前为止,我所做的是C 自定义linux内核系统调用包装函数,c,linux,kernel,system-calls,C,Linux,Kernel,System Calls,我正在为linux内核编写一个自定义系统调用 函数调用一切正常,现在我正在尝试 创建包装函数,以便在任何程序中正常使用该函数 不使用系统调用(调用) 到目前为止,我所做的是 #include <stdlib.h> #include<stdio.h> #include<linux/unistd.h> #include<errno.h> #include <sys/types.h> #include <unistd.h> #in
#include <stdlib.h>
#include<stdio.h>
#include<linux/unistd.h>
#include<errno.h>
#include <sys/types.h>
#include <unistd.h>
#include<string.h>
#include <linux/sched.h>
#include <linux/kernel.h>
long *__wrap_process_info(int myid , void *udata)
{
return syscall(337 , myid , udata);
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
长*换行\流程\信息(int myid,void*udata)
{
返回系统调用(337,myid,udata);
}
我的系统调用错误时返回-1,正确执行时返回0
我的问题是,如何使包装函数返回syscall返回值?
而且,我是否需要在包装函数中包含main?假设您使用的是
*
作为通配符,而不是指针表示法。您的实现已经返回了函数syscall
返回的值。如果出现错误,其代码将存储在errno
变量中,您可能希望将该变量复制到将传递给函数的其他参数:
long <???>__wrap_process_info(int myid , void *udata, long *err )
{
long result;
result = syscall(337 , myid , udata);
*err = errno;
return result;
}
long\uuu wrap\u进程信息(int myid、void*udata、long*err)
{
长期结果;
结果=系统调用(337,myid,udata);
*err=errno;
返回结果;
}