我如何在 freebsd 中调用系统调用?

how can I call a system call in freebsd?

我创建了一个与 /usr/share/examples/kld/syscall/module/syscall.c 相同的系统调用,但消息略有变化。 我使用了 kldload 和模块加载。现在我想调用系统调用。 这个系统调用号是多少,所以我可以调用它? 或者调用此系统调用的方式是什么?

我建议你看一下 Designing BSD rootkit,这就是我在 FreeBSD 上学习内核编程的方式,甚至有一节都在讨论如何制作你自己的系统调用。

好吧,如果您检查 /usr/share/examples/kld/syscall 目录,您会看到它包含一个测试程序.....但是嘿,我们假设该程序不存在。

让我们看一下模块本身的一部分:

/*
 * The offset in sysent where the syscall is allocated.
 */
static int offset = NO_SYSCALL;

[..]
        case MOD_LOAD :
            printf("syscall loaded at %d\n", offset);
            break;

模块在加载时打印系统调用号,所以现在的工作是学习如何调用它...在 google 上搜索 'freebsd call syscall'...

显示:http://www.freebsd.cz/doc/en/books/developers-handbook/x86-system-calls.html (although arguably not something to use on amd64) and.. https://www.freebsd.org/cgi/man.cgi?query=syscall&sektion=2 - 允许您调用任意系统调用的函数的手册页。

我强烈建议您自己进行一些挖掘。如果不这样做,您绝对无法编写任何内核代码。