1

作为一个概念验证,加上一个方便的偏执工具,我正在编写一个 OpenBSD LKM,它将连接到一个 IRC 通道,并在执行挂钩的系统调用时报告。

这样,当我不在现场但可以访问互联网时,我基本上可以对文件系统更改、用户登录等进行“实时”更新。

我已经连接了套接字,但我一直在尝试执行相当于硬编码地址的调用,getaddrinfo甚至inet_addr调用。

由于这些是用户态函数,因此任何使用它们的尝试都会导致未定义的引用——这很公平。问题是,经过一段时间的谷歌搜索和 grep 的 openbsd 源代码,我找不到任何等效的内核函数来执行此操作;最好的建议是在模块中重新实现它们。

这意味着我还需要实现islower,isxdigitisspace(随着我的进步可能还有其他),这对于执行如此简单的事情会有点多;是否有人知道解决方法或替代方法,或者我是否从网络文件中卡住了 c+p 代码?

4

1 回答 1

2

这绝对是在用户空间中做得更好。无论如何,OpenBSD 不再支持内核模块。

不是说你在做这个项目了。我只是想回答一下,以便可以关闭它,以便我可以阐明如何在内核中使用一些 stdlib 函数。

对此作出回应:

这意味着我还需要实现诸如 islower、isxdigit 和 isspace 之类的东西(随着我的进步可能还有其他东西),这对于执行如此简单的事情会有点多;是否有人知道解决方法或替代方法,或者我是否从网络文件中卡住了 c+p 代码?

一些 C 标准库函数可从 libkern 获得(请参阅 参考资料libkern(9))。其他的,包括许多 ctype 函数,如islower(),可从 libsa 获得。要使用这些,您需要以下内容:

#include <lib/libkern/libkern.h>
#include <lib/libsa/stand.h>

libsa 包含一些标头(在 中找到/usr/src/sys/lib/libsa/),因此请包含您需要的每个标头。

于 2015-12-13T20:23:40.517 回答