【问题标题】:Custom linux kernel syscall wrapper function自定义 linux 内核系统调用包装函数
【发布时间】:2015-05-05 19:03:51
【问题描述】:

我正在为 linux 内核编写自定义系统调用 函数调用一切正常,现在我正在尝试 创建一个包装函数,以便在任何程序中正常使用该函数 不使用系统调用(调用)

到目前为止我所做的是

#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);
}

我的系统调用在错误时返回 -1,如果正确执行则返回 0 我的问题是,如何使包装函数返回系统调用返回值? 并且,我需要在包装函数中包含一个 main 吗?

【问题讨论】:

    标签: c linux kernel system-calls


    【解决方案1】:

    假设您使用* 作为通配符而不是指针表示法。您的实现已经返回了函数syscall 返回的值。如果出现错误,它的代码将存储在 errno 变量中,您可能希望将其复制到您将传递给函数的一些附加参数中:

    long <???>__wrap_process_info(int myid , void *udata, long *err )
    {
        long result;
        result = syscall(337 , myid , udata);
        *err = errno;
        return result;
    }
    

    【讨论】:

      猜你喜欢
      • 2020-01-17
      • 2014-01-27
      • 1970-01-01
      • 2010-09-20
      • 2012-11-18
      • 1970-01-01
      • 1970-01-01
      • 2015-01-13
      • 1970-01-01
      相关资源
      最近更新 更多