我如何在 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 - 允许您调用任意系统调用的函数的手册页。
我强烈建议您自己进行一些挖掘。如果不这样做,您绝对无法编写任何内核代码。
我创建了一个与 /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 - 允许您调用任意系统调用的函数的手册页。
我强烈建议您自己进行一些挖掘。如果不这样做,您绝对无法编写任何内核代码。