作为概念验证以及方便的偏执工具,我正在编写一个将连接到IRC channel 的OpenBSD LKM,并在执行挂接的系统调用时进行报告。
这样,当我不在现场但可以访问Internet时,基本上可以实时更新文件系统的更改,用户登录等。
我已经达到了连接套接字的目的,但是一直坚持尝试执行与带有硬编码地址的getaddrinfo
甚至inet_addr
调用等效的操作。
由于这些是用户界面功能,因此任何尝试使用它们的操作都将导致 undefined reference -足够公平。问题是,经过一段时间谷歌搜索和grep'openbsd源代码后,我找不到任何等效的内核函数来执行此操作。最好的建议是在模块中重新实现它们。
这意味着我还需要实现islower
,isxdigit
和isspace
(可能还有其他一些东西,随着我的进步),它们可以执行一些简单的事情。有谁知道解决方法或替代方法,还是我从网络文件中卡住了c + p代码?
最佳答案
这绝对是在用户空间中更好的方法。无论如何,OpenBSD不再支持内核模块。
并不是说您正在从事这个项目。我只是想回答一下,以便可以将其关闭,以便澄清如何在内核中使用某些stdlib函数。
针对此:
libkern提供了一些C stdlib函数(请参阅libkern(9)
)。其他的,包括许多ctype函数,例如islower()
,都可以从libsa获得。要使用这些,您需要类似以下内容:
#include <lib/libkern/libkern.h>
#include <lib/libsa/stand.h>
libsa包含一些头(可在
/usr/src/sys/lib/libsa/
中找到),因此请包含您需要的每个头。关于c - OpenBSD内核模块调用网络功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11921696/