freebsd 第一个程序--创建系统调用并调用

2009-05-13 14:28:09来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

这两天安装完FreeBSD,抽空也看看怎么编写KLD,还好觉得比LINUX容易些。
先完成一个内核模块,主要是按照rootkit来的,小做修改,因为我用的FreeBSD毕竟是7.0了,
也是些不同了。
example.c
#include sys/types.h>
#include sys/param.h>
#include sys/proc.h>
#include sys/module.h>
#include sys/sysent.h>
#include sys/kernel.h>
#include sys/systm.h>
#include sys/sysproto.h>
/* The system call's arguments. */
struct example_args {
        char *str;
};
/* The system call function. */
static int
example(struct thread *td, void *syscall_args)
{
        struct example_args *uap;
        uap = (struct example_args *)syscall_args;
        printf("%s\n", uap->str);
        return(0);
}
/* The sysent for the new system call. */
static struct sysent example_sysent = {
        1, /* number of arguments */
        example, /* implementing function */
        0,
        NULL,
        0
};
/* The offset in sysent[] where the system call is to be allocated. */
static int offset = NO_SYSCALL;
/* The function called at load/unload. */
static int
load(struct module *module, int cmd, void *arg)
{
        int error = 0;
        switch (cmd) {
        case MOD_LOAD:
                uprintf("System call loaded at offset %d.\n", offset);
                break;
        case MOD_UNLOAD:
                uprintf("System call unloaded from offset %d.\n", offset);
                break;
        default:
                error = EOPNOTSUPP;
                break;
        }
        return(error);
}
SYSCALL_MODULE(example, &offset, &example_sysent, load, NULL);
其实我倒喜欢BSD的Makefile了,简单,呵呵
Makefile
KMOD= example           # Name of KLD to build.
SRCS= example.c         # List of source files.
.include bsd.kmod.mk>
这样算一个模块就写完了,而且是新加了系统调用的哦。
make完了,kldload ./example.ko 算是load module了。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Dell 2950安装FB6.2R的问题,望达人指点!

下一篇:sourceforge.net给封了?