1

概念実証と便利なパラノイド ツールとして、IRC チャネルに接続し、フックされたシステム コールが実行されたときにレポートする OpenBSD LKM を作成しています。

これは、私がオフサイトにいてもインターネットにアクセスできるときに、ファイルシステムの変更、ユーザーのログオンなどの「ライブ」更新を基本的に行うことができるようにするためです。

私はソケットを接続するところまで行きましたが、ハードコードされたアドレスを使用して、getaddrinfoまたはinet_addr呼び出しと同等のことを実行しようとして立ち往生しています。

これらはユーザーランド関数であるため、それらを使用しようとすると、未定義の参照が発生します-十分に公平です。問題は、しばらくの間 openbsd ソースをググって grep した後、これを行うための同等のカーネル関数が見つからないことです。モジュールでそれらを再実装することをお勧めします。

これはislower、 、isxdigitisspace(および、進行するにつれておそらく他のものも) なども実装する必要があることを意味します。これに対する回避策または代替手段を知っている人はいますか、それともネットファイルからc + pコードをスタックしていますか?

4

1 に答える 1

2

これは、ユーザー空間で行う方が確実です。いずれにせよ、OpenBSD はカーネル モジュールをサポートしなくなりました。

もうこのプロジェクトに取り組んでいるわけではありません。これを閉じて、カーネルでいくつかのstdlib関数を使用する方法を明確にするために、答えたかっただけです。

これに応えて:

これは、islower、isxdigit、isspace なども実装する必要があることを意味します (そして、進行するにつれておそらく他のものも実装する必要があります)。これに対する回避策または代替手段を知っている人はいますか、それともネットファイルからc + pコードをスタックしていますか?

一部の C stdlib 関数は、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 に答える