关于在 FreeBSD 中编写自己的系统调用的问题
好的,我刚刚读完 FreeBSD 的 Kill(2) 的实现,并尝试编写我自己的“kill”。此系统调用采用 uid
和 signum
并将信号发送到 uid 拥有的进程(不包括调用进程)。
如何将 uid
传递给系统调用?在kill(2)中,pid
位于参数structkill_args
中。是否有一个包含 uid
的结构,就像 structkill_args
包含 pid
一样?如果没有,我可以在内核之外定义一个结构吗?
OK, so I just finish reading the implementation of kill(2) of FreeBSD, and am trying to write my own "kill". This system call takes uid
and signum
and sends the signal to processes owned by uid, excluding the calling process.
How can I pass uid
to the system call? In kill(2), pid
is in argument struct kill_args
. Is there a structure that contains uid
the way that struct kill_args
contains pid
? If not, can I define a structure outside the kernel?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这很简单,但是是一个复杂的过程。这是一个安装系统调用的模块。
包括一堆东西
定义你的结构来保存参数
定义一个处理函数
你需要一个 sysent 对象
和一个将安装系统调用的偏移量。
load
函数安装系统调用
您可以使用
syscall(2)
运行系统调用。或者使用 perl :))。这是一个例子It's easy, but kind of an involved process. Here's a module that installs a system call.
Include a bunch of stuff
Define your structure to hold arguments
Define a handling function
You need a sysent object
And an offset at which the system call will be installed.
load
functionInstall the system call
You can run your system call using
syscall(2)
. Or using perl :)). Here's an example